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条评论
登录后参与评论

相关文章

来自分类Dev

C++ 异常抛出:访问冲突写入

来自分类Dev

C ++抛出异常导致内存泄漏

来自分类Dev

抛出C ++异常:读取访问冲突。这是nullptr

来自分类Dev

C#/ C ++传递结构获得访问冲突异常

来自分类Dev

C:链表的结构初始化导致访问冲突异常

来自分类Dev

C内存分配(malloc)

来自分类Dev

C ++ malloc():内存损坏

来自分类Dev

C ++结构访问冲突

来自分类Dev

malloc结构C

来自分类Dev

C++ Int 似乎没有初始化并抛出异常:读取访问冲突

来自分类Dev

尝试合并多个图像时,C#Graphics.DrawImage()抛出内存不足异常

来自分类Dev

c malloc结构体数组

来自分类Dev

C ++错误的内存分配异常

来自分类Dev

使用C ++异常的内存泄漏

来自分类Dev

C中的结构内存分配

来自分类Dev

C-结构的内存分配

来自分类Dev

从C ++到C#//结构内存优化

来自分类Dev

在OSX + clang上的准系统SWIG python C接口segfaulting,不在Linux + gcc中

来自分类Dev

捕获c ++“访问冲突写入异常”?

来自分类Dev

winrt c ++ / cx并发访问冲突异常

来自分类Dev

在C中实现隔离的内存存储(malloc)

来自分类Dev

C中的Malloc内存消耗行为

来自分类Dev

malloc():内存损坏(快速)错误C ++

来自分类Dev

目标c中的malloc和内存泄漏

来自分类Dev

在C中实现隔离的内存存储(malloc)

来自分类Dev

C-访问malloc的内存后的SIGSEGV

来自分类Dev

在C中使用malloc保留内存

来自分类Dev

C#HttpClient抛出异常消息

来自分类Dev

不变类中的C#抛出异常