Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将存储在Void指针处的Int数组复制到Int数组_C++_C_Arrays_Void Pointers - Fatal编程技术网

C++ 将存储在Void指针处的Int数组复制到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你做了错事,当编译器警告你时,你就和演员们闭嘴。不,你是在打自己的脚,谁该受责备?:

在下面的循环中,我试图复制存储在voidPtr地址的数据。这里的数据是长度计数的整数数组。我已经读到,将这个数组强制转换为int,然后执行复制(如下所示)应该可以

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]);
  }