C malloc结构抛出内存冲突异常(准系统示例)

利匹肽

这是示例:

#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中编译并运行它时却无法运行,为什么会这样呢?

史蒂夫·萨米特(Steve Summit)

最可能的问题是缺少的声明malloc()您应该添加行

#include <stdlib.h>

在代码的顶部。

如果没有这一行,编译器可能会假定mallocreturn 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章