c - 两个指针的段错误

标签 c pointers segmentation-fault

我不明白为什么,如果我从下面的代码中删除注释,就会出现段错误。

#include <stdio.h>

int main(){
    int var = 9;
    int *ptr;
    *ptr = 20;
    int *ptrD;
    *ptrD = 26;

    printf("var %d\n", var);
    printf("*ptr %d\n", *ptr);
    printf("*ptrD %d\n", *ptrD);

    *ptr = 18;
    printf("*ptr %d\n", *ptr);
    *ptrD = 24;
    printf("*ptrD %d\n", *ptrD);

        return 0;
    }

最佳答案

在您的代码中,

 printf("*ptrD %d\n", *ptrD);

ptrD 未初始化,它指向某个随机位置。效果:undefined behavior .

同样的情况

*ptrD = 26;
printf("*ptrD %d\n", *ptrD);

也是。

也许你想要,(但错过了)

ptrD = &var;

作为定义之后的下一个语句。

[P.S - 你应该庆幸的是,由于 UB 的原因,应用程序没有使用你的信用卡为你的所有同事订购披萨和小马。开个玩笑,一旦你达到了 UB,就没有什么,绝对没有任何保证。]

关于c - 两个指针的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34451526/

相关文章:

c - Valgrind 错误结构

c - 扫描到数组

c - fork 进程,读取文件但不显示其内容

c++ - 如何从函数返回 vector

c - qsort 无法正确排序 C 中结构体的指针数组

c - 为什么以这种方式传递结构会产生段错误?

c - Malloc 结构的大空间并像 c 中的数组一样访问它

c - 尝试在 C 中打印值时出现段错误

c - wcstombs 段错误

c++ - C++中的 vector 迭代器