我目前正在学习C,并从wibit.com复制了以下内容:
#include <stdio.h>
int main()
{
int* n;
*n = 20;
printf("%i\n", *n);
return 0;
}
我正在使用GCC并在cmd提示符下编译并运行,如下所示:
gcc prgrm.c -o prgrm.exe #compiles without any errors
prgrm.exe
然后错误 pop ,提示prgrm.exe已停止工作。我单击调试并得到以下信息:
我所有的程序之前都已经运行过,我还用其他几个程序进行过测试(只需返回0;或printf(etc ...)),它们就可以工作!
有任何想法吗?
谢谢
最佳答案
int* n;
声明一个指向
int
的指针。它没有分配地址,因此指向内存中的任意地址。这个地址几乎可以肯定是不会写的。即使它是可写的,它也不是您的记忆,所以您不知道编写它的效果。*n = 20;
尝试写入此不可预测的地址。这导致不确定的行为。崩溃是未定义行为的有效(且有用)类型。
为了使程序正常工作,您需要为
n
分配存储空间。您可以在堆栈上执行此操作int n;
n = 20;
printf("%i\n", n);
或动态地在堆上
int* n = malloc(sizeof(*n));
if (n == NULL) {
printf("Error: out of memory\n");
return -1;
}
*n = 20;
printf("%i\n", *n);
free(n);
请注意,如果您启用了构建警告,则编译器会警告您有关未初始化变量的使用。将
-Wall
添加到您的gcc命令行或/W4
用于MSVC来启用此功能。关于c - 基本C程式已停止运作: just in time debugger,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17527375/