【问题标题】: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++ 是非常不同的语言。只用其中一个标记您的问题。

标签: 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) 字节数,当您访问超出该字节数的内存时,它将最终访问无效内存并且程序可能会崩溃

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 2019-07-16
    相关资源
    最近更新 更多