我是指针的新手,并且正在运行一些测试代码。我知道分段错误意味着我正在尝试访问一些我不应该访问的内存;但是,我不明白我在这里的思路出了什么问题。
int main(void) {
int *ptr;
*ptr = 400;
printf("%d\n", *ptr);
return 0;
}
该函数编译正常。据我了解,声明ptr时,它具有任意的内存地址。然后,第二行将400作为对该内存地址的引用。最后,printf()行应返回400,但这给了我一个核心转储。
有人可以澄清吗?我看了几个指针示例,我以为我已经掌握了它,直到尝试了这个。
答案 0 :(得分:1)
您没有要写入的内存。您需要分配内存以便能够对其进行写入。否则,您(可能)会遇到细分错误。
如果您将打开编译时警告,则clang会警告您
prog.cc:6:5: warning: variable 'ptr' is uninitialized when used here [-Wuninitialized]
*ptr = 400;
^~~
prog.cc:4:12: note: initialize the variable 'ptr' to silence this warning
int *ptr ;
这是更正的代码
#include <stdio.h>
#include<stdlib.h>
int main(void) {
int *ptr = (int*)malloc(sizeof(int));
*ptr = 400;
printf("%d\n", *ptr);
return 0;
}