int *i;
*i=123;
答案 0 :(得分:30)
是。没有分配内存来放置值123
。
像初始化int
这样的变量并不保证0
,int*
不能保证是一个安全的地址。
它还可能导致数据损坏。
答案 1 :(得分:29)
它可以,但它又可以做任何事情 - 它展示了C标准所称的“undefined behaviour”。
答案 2 :(得分:3)
答案 3 :(得分:2)
32位操作系统的概率:
估计仅表示数量级。仅与发布版本相关。如果它确实破坏了程序状态,那么它将这样做的几率一直攀升到接近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) )