代码之家  ›  专栏  ›  技术社区  ›  ripytide

C malloc struct抛出内存冲突异常(barebones示例)

c
  •  3
  • ripytide  · 技术社区  · 4 年前

    以下是示例:

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

    1 回复  |  直到 4 年前
        1
  •  3
  •   Steve Summit    4 年前

    最可能的问题是缺少 malloc() . 你应该加一行

    #include <stdlib.h>
    

    在代码的顶端。

    malloc 退货 int . 但是,如果您在64位平台上,使用32位int,但使用64位指针,那么这将非常失败。指针变量 ball 马洛克 因此将是一个无效的指针,导致您看到的异常。

    你收到警告了吗?我的编译器抱怨

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

    或者,你可能会收到这样的信息

    warning: implicit declaration of function 'malloc' is invalid in C99
    

    没有 如果得到这样的警告,您应该知道如何在编译器中启用它们。(或者,如果这不可能,您应该强烈考虑切换到一个更好的编译器,如果可能的话。)现代C编程实践肯定认为这个错误是一个值得警告的错误。还有一些 太多了