我目前正在学习 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
然后弹出错误提示 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 的命令行或为 MSVC 添加 /W4
以启用此功能。
关于c - 基本 C 程序已停止工作 : just in time debugger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17527375/