这是示例:
#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
return 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编程实践肯定认为此错误是值得警告的错误。而且有很多像这样的,很容易犯错误的,令人沮丧的调试,而一个好的编译器会警告你,至少,如果你让它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句