在下面的循环中,我尝试复制存储在 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/