示例如下:
#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编程实践明确认为这种错误值得警惕。有很多像这样的错误很容易犯,调试起来很令人沮丧,一个好的编译器会警告你,至少如果你允许的话。