访问分配的内存时出现访问冲突错误[重复]
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) 字节数,当您访问超出该字节数的内存时,它将最终访问无效内存并且程序可能会崩溃
【讨论】:
以上是关于访问分配的内存时出现访问冲突错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章
WindowsError:异常:使用从 C++ 到 Python 的 ctypes 创建 DLL 时出现访问冲突或 Windows 错误 193