c++ - 将存储在 Void 指针处的 Int 数组复制到 Int 数组

标签 c++ c arrays void-pointers

在下面的循环中,我尝试复制存储在 voidPtr 地址处的数据。已知此处的数据是长度为 count 的整数数组。我读过将此数组转换为 int 然后执行复制(如下所示)应该可行。

int intArr[count];
  for (int i = 0; i<count; i++){
    intArr[i] = ((int*) voidPtr)[i];
  }

但是,当我尝试按 int 打印数组 int 时,我收到了段错误。

  for (int i = 0; i<count; i++){
    printf("%d ", intArr[i]);
  }

有什么想法吗?

最佳答案

你做错了事情,当编译器警告你时,你只需用强制转换将其关闭即可。不,你搬起石头砸自己的脚,这该怪谁呢? :)

你所做的就是说 voidPtr 现在变成了 int*,请访问它的元素 i。这不可能是正确的。最有可能的是,在您的系统上, void* 与 int* 不同,因此通过此转换,您将访问不正确的元素。另外,您的 void* 似乎没有指向足够大的位置 - 这就是导致崩溃的原因。

不要在 C++ 中使用 void*,不要强制转换。

关于c++ - 将存储在 Void 指针处的 Int 数组复制到 Int 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33290924/

相关文章:

c - fopen 和 fopen_s 似乎在长文件名上崩溃

c - 使用数组表示法访问函数内的三重指针

c - 链表未释放,丢失内存泄漏

c++ - 将二进制文件加载到 Eigen 矩阵时删除可能冗余的模板参数

c++ - C++ 编译时的静态数组

c++ - 读取Opus文件,搜索编码音频数据

c++ - 检查到目前为止我在 C++ 中使用了哪些值的最快方法是什么?

javascript - 在 javascript 中从平面对象数组构建对象图

c++ - 重复调用 CreateCompatibleBitmap() 最终因 GetLastError() == 6 失败

c++ - 将取消引用 Char 迭代器转换为 int C++