【发布时间】:2015-10-31 16:34:46
【问题描述】:
在下面给出的c代码中,我声明了一个整数指针但未初始化意味着它是野指针,所以当我尝试取消引用它时,它应该给出分段错误。但它没有给出SAG.FAULT,为什么?
(在linux环境下使用gcc编译器)
/*not giving segmentation fault*/
#include<stdio.h>
int main()
{
int *p ;
printf("%p\n",p);
printf("%p\n",*p);
return 0;
}
如果我用某个值初始化该指针,它会给我下面给出的代码中的分段错误
/*it is giving segmentation fault*/
#include<stdio.h>
int main()
{
int *p =12444 ;
printf("%p\n",p);
printf("%p\n",*p);
return 0;
}
【问题讨论】:
-
您应该知道一个指针指向某个内存位置,而您尝试分配给它的数字是非法的,因为您没有为该指针分配一些内存 (*p)。
-
试试这个 gcc -Wextra -Werror -Wstrict-prototypes -Wconversion --std=c11 -O0 -g program.c -o program this is what you need
-
顺便说一下 *p 的内容是用 %d 打印的,而不是像当你尝试打印它的地址时那样用 %p 打印的。
-
由于内存位置是整数,最好使用 unsigned int ...使用 %u 而不是 %p
-
@ch3rub7 真的吗?如果数字变成 -25 怎么办?
标签: c linux pointers gcc dereference