c - 基本 C 程序已停止工作 : just in time debugger

标签 c debugging error-handling visual-studio-debugging

我目前正在学习 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 已停止工作。我单击调试并得到这个:

Debug Report

我的所有程序之前都运行过,我用另外几个程序对其进行了测试(只需返回 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/

相关文章:

使用 read() 函数时检查 EOF

c - C中的二维字符串数组

php - PHP自定义错误处理程序可在 header 已发送时重定向或显示错误页面。这段代码不好吗?

c - 休息;未选择正确选项时出现问题。

c - 如何存储然后打印二维字符/字符串数组?

ruby - 如何让 ruby​​ 打印包含传递给函数的参数的完整回溯?

.net - 如何获取非当前线程的堆栈跟踪?

C++ - Eclipse 行为在调试和运行时是不同的

vb.net - 在VB中处理OpenFileDialog时出错

php - 引用 - 这个错误在 PHP 中意味着什么?