这个C代码会导致分段错误吗?

时间:2010-01-01 14:51:23

标签: c

int *i;
*i=123;

6 个答案:

答案 0 :(得分:30)

是。没有分配内存来放置值123

像初始化int这样的变量并不保证0int*不能保证是一个安全的地址。

它还可能导致数据损坏。

答案 1 :(得分:29)

它可以,但它又可以做任何事情 - 它展示了C标准所称的“undefined behaviour”。

答案 2 :(得分:3)

答案 3 :(得分:2)

32位操作系统的概率:

  • 触发硬件异常的可能性:99.9995%
  • 损坏程序状态的可能性:0.0005%
  • 意外击中正确记忆位置的可能性:1十亿分之二

估计仅表示数量级。仅与发布版本相关。如果它确实破坏了程序状态,那么它将这样做的几率一直攀升到接近100%。一个好的编译器使Debug构建中的硬件异常几率达到100%。获得一个好的编译器。

答案 4 :(得分:2)

是的,您发布的代码可能会导致细分错误。你有一个未初始化的指针(不指向任何已知位置),然后你用它来存储东西。 '某事'去哪儿了?好问题,没有一致的答案。

您需要初始化该指针。例如:

int target = 0;
int *i = ⌖ 

printf("target=%d\n", target);
*i=123; 
printf("target=%d\n", target);

我希望这会有所帮助。

答案 5 :(得分:1)

int *i;这为指针分配一个内存,但是这个变量没有被初始化,因此它的值是完全随机的。然后你取消引用它,所以你有一个随机地址并在内存中执行写入这个地方但是1)你不知道这个地方在哪里2)这个地方可能不是你的。您可以使用int * i = ( int* ) malloc( sizeof(int) )

等初始化来修复它