访问分配的内存时出现访问冲突错误[重复]

Posted

技术标签:

【中文标题】访问分配的内存时出现访问冲突错误[重复]【英文标题】:getting access violation error while accessing allocated memory [duplicate] 【发布时间】:2017-11-05 08:29:58 【问题描述】:

我使用 malloc 分配了 100 MB 的内存

block = (char *)malloc(sizeof(10485760));  // char *block is a global variable

然后我将块中的值分配给一些局部变量,比如 localblock

char *localblock = block;

当我尝试在 1 MB 后访问位置并在该位置复制字符串时出现访问冲突错误

int si = 1048576;

for (int i=0; i < si; ++i)
    ++localptr;

strcpy(localblock,"random_string");

【问题讨论】:

sizeof(10485760)??真的吗?你认为这有什么作用? 同时删除 C++ 标签,这是 C 代码 - 在 C 中你也不需要转换 malloc 的返回 "我已经使用 malloc 分配了 100 MB 的内存..."不,你没有 有一种更好的方法可以让指针前进 X 元素而不是循环:localptr += si; 作为@UnholySheep,C 和C++ 是非常不同的语言。只用其中一个标记您的问题。 【参考方案1】:

当您使用malloc 时,无法保证分配。

block = (char *)malloc(sizeof(10485760));is 正在尝试10485760 分配空间,这是一个 int - 意思是 32/64 位机器上的 4/8 字节。 "random_string" 比那个长,因此你的错误

【讨论】:

sizeof(10485760)10485760 需要的大小【参考方案2】:
block = (char *)malloc(sizeof(10485760));

仅分配 sizeof(int) 字节数,当您访问超出该字节数的内存时,它将最终访问无效内存并且程序可能会崩溃

【讨论】:

以上是关于访问分配的内存时出现访问冲突错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

调用 glDrawArrays 时出现访问冲突错误

使用带有分号字符的 STRPOS 时出现语法错误或访问冲突

WSDL可调用接口方法调用时出现访问冲突错误...?

MFC:在工作线程中使用对象的成员函数时出现访问冲突错误

WindowsError:异常:使用从 C++ 到 Python 的 ctypes 创建 DLL 时出现访问冲突或 Windows 错误 193

为什么在尝试将指向数组的指针作为函数的参数时出现访问冲突错误?