【问题标题】:Why does this C code cause segmentation error? Trying to understand pointers [duplicate]为什么这个 C 代码会导致分段错误?试图理解指针[重复]
【发布时间】:2019-09-22 05:48:33
【问题描述】:

试图了解在执行此代码期间内存中究竟发生了什么以及它导致分段错误的原因。

#include <stdio.h>

int main() {
    int* ptr;
    *ptr = 5;
    printf("%d", *ptr);
    return 0;
}

【问题讨论】:

  • *ptr = 5 尝试将5 写入p 中保存的地址。问题:这个地址是什么?你有写它的权限吗?

标签: c


【解决方案1】:

必须先将所有变量初始化为有效值,然后才能在*p 等表达式中使用它们。对于指针,这意味着分配一个地址来指向。您可以通过获取另一个变量的地址或使用 malloc() 动态分配内存来做到这一点。

当您尝试使用*p 取消引用未初始化的指针时,它将使用当时恰好存储在p 中的任何内存地址。该地址很可能对您无效,因此您会遇到段错误。

【讨论】:

    【解决方案2】:

    先给指针变量分配内存

    ptr = (int* ) malloc(sizeof(int))
    

    【讨论】:

    • OP 询问为什么会发生段错误。这将修复 seg 错误,但并不能真正解释原始代码中发生了什么。
    • 请改成ptr = (int*) malloc(sizeof(int));
    • @Mani 您可以自己编辑答案。
    • @Mani 你为什么要(int*)?这是完全没有必要的。另外,您可以将sizeof(int) 更改为sizeof(*ptr)
    猜你喜欢
    • 2016-10-25
    • 2017-08-18
    • 1970-01-01
    • 2016-09-24
    • 2011-03-16
    • 2014-03-06
    • 2010-12-09
    • 1970-01-01
    • 2011-11-22
    相关资源
    最近更新 更多