C malloc结构抛出内存冲突异常(基本示例)

  • 本文关键字:异常 冲突 结构 malloc 内存 c
  • 更新时间 :
  • 英文 :


示例如下:

#include <stdio.h>
struct nums {
int x;
int y;
};
int main() {
struct nums *ball = malloc(sizeof *ball * 4);
ball[0].x = 2;
printf("%d", ball[0].x);
free(ball);
};

错误详细信息:

Exception thrown: write access violation.
**ball** was 0x6E919550.

我对C很陌生,我真的很感激有人能解释一下我在这里具体告诉计算机要做什么,为什么它是不正确的,并告诉我正确的方法。谢谢。

编辑:这似乎是功能代码,但不运行时,我编译和运行它在VS16为什么会这样?

最有可能的问题是缺少malloc()的声明。你应该加上

一行
#include <stdlib.h>

在你的代码的顶部。

如果没有这一行,编译器可能会认为malloc返回int。但如果你在64位平台上,使用32位整型但64位指针,这将会失败得很严重。您的指针变量ball可能最终只持有malloc试图返回的64位中的32位,而其他32位则被刮掉。因此,ball将是一个无效指针,导致您看到的异常。

你得到任何警告吗?编译器报错

warning: implicitly declaring library function 'malloc'
note: include the header <stdlib.h>

或者,您可能收到了像

这样的消息
warning: implicit declaration of function 'malloc' is invalid in C99

如果你收到这样的警告,请不要忽视它们,并了解它们的含义:它们绝对是你关心的事情。如果没有得到这样的警告,您应该弄清楚如何在编译器中启用它们。(如果这是不可能的,你应该强烈考虑切换到一个更好的编译器,如果可能的话。)现代C编程实践明确认为这种错误值得警惕。有很多像这样的错误很容易犯,调试起来很令人沮丧,一个好的编译器会警告你,至少如果你允许的话。

最新更新