C++ 将存储在Void指针处的Int数组复制到Int数组
在下面的循环中,我试图复制存储在voidPtr地址的数据。这里的数据是长度计数的整数数组。我已经读到,将这个数组强制转换为int,然后执行复制(如下所示)应该可以C++ 将存储在Void指针处的Int数组复制到Int数组,c++,c,arrays,void-pointers,C++,C,Arrays,Void Pointers,在下面的循环中,我试图复制存储在voidPtr地址的数据。这里的数据是长度计数的整数数组。我已经读到,将这个数组强制转换为int,然后执行复制(如下所示)应该可以 int intArr[count]; for (int i = 0; i<count; i++){ intArr[i] = ((int*) voidPtr)[i]; } int intar[count]; 因为(inti=0;i你做了错事,当编译器警告你时,你就和演员们闭嘴。不,你是在打自己的脚,谁该受责备?:
int intArr[count];
for (int i = 0; i<count; i++){
intArr[i] = ((int*) voidPtr)[i];
}
int intar[count];
因为(inti=0;i你做了错事,当编译器警告你时,你就和演员们闭嘴。不,你是在打自己的脚,谁该受责备?:)
您所做的是说voidPtr现在变成int*,请访问它的元素i
。这不可能是正确的。最有可能的是,在您的系统上,void*与int*不同,因此通过此强制转换,您将访问不正确的元素。此外,你的虚空似乎没有指向足够大的位置——这就是导致崩溃的原因
< P>不要在C++中使用空洞*,不要抛出。首先,你应该只是<代码> MycPy(INTARR,VoIDPTR,Cuth*sisiof(int));代码>用于复制(更简单、更高效)。第二,你能不能多发一些代码。您显示的内容似乎不包含特定的错误。正如@865719所述,您需要提供一个完整的示例来说明问题。如果您所有的假设都是正确的(您没有提供代码),那么上面的代码就可以工作。这就是一个例子。您可能还需要重新考虑您的设计,因为使用void*
传递其他类型不是一个好的设计实践,很容易让您陷入麻烦。@865719使用malloc和memcpy解决了这个问题。我假设我创建的容器大小不够大。非常感谢您的建议,我将在以后的帖子中尝试更彻底一点。@Mongool使用malloc和memcpy解决了这个问题——如果您不知道这“解决了问题”的确切原因,这不是一个解决方案。您所做的只是屏蔽bug,但bug仍然存在。假设您使用的是可变长度数组(顺便说一句,C++没有这些数组),那么您的代码应该可以正常工作。您可能在其他地方有一个bug影响了此代码。@Paul,我必须进一步排除它。您似乎感到困惑。我没有。OP是。我对该PTR的性质做了一些假设-未提供其定义。
for (int i = 0; i<count; i++){
printf("%d ", intArr[i]);
}