int *i;
*i=123;
int *i;
*i=123;
是的。没有分配内存来存储值123
。
就像初始化变量int
不能保证为0
一样,int*
也不能保证是安全的地址。
这也可能会导致数据损坏。
它可以,但也可能做任何事情——它表现出C标准所谓的“未定义行为”。
32位操作系统的大致概率:
仅估算数量级。 仅适用于发布版本。 如果确实破坏了程序状态,则它会一致地爬升到接近100%。 好的编译器可以使调试版本中的硬件异常几率达到100%。 获取好的编译器。
是的,您发布的代码可能会导致分段错误。您有一个未初始化的指针(不指向任何已知位置),然后将其用于存储某些内容。这个“东西”去哪了?好问题,没有一致的答案。
您需要初始化该指针。例如:
int target = 0;
int *i = ⌖
printf("target=%d\n", target);
*i=123;
printf("target=%d\n", target);
我希望这能有所帮助。
int *i;
这段代码分配了一个指针的内存空间,但是这个变量没有被初始化,所以它的值是随机的。然后你对它进行解引用操作,得到一个随机地址,并在内存中写入数据,但是 1) 你不知道这个地址是哪里 2) 这个地址可能不属于你的内存空间。你可以通过初始化来解决这个问题,例如 int * i = ( int* ) malloc( sizeof(int) )
new
运算符。 - Daniel A. Whitevoid*
转换为int *
是不必要的,也是不良实践。使用int *i = malloc(sizeof(int));
就足够了。 - Chinmay Kanchi