gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:40:11 25 4
gpt4 key购买 nike

这是示例:

#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很可能最终只保留 64 位中的 32 位 malloc试图返回,其他 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 编程实践肯定认为这个错误值得警告。并且有很多这样的错误很容易犯,调试起来令人沮丧,一个好的编译器会警告你,至少如果你允许的话。

关于C malloc struct 抛出内存冲突异常(准系统示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66196174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com