【发布时间】:2017-03-12 17:27:41
【问题描述】:
我正在使用 VoidPtr 做一些事情,当我在 Quincy 或 Eclipse 等其他 IDE 上测试我的代码时,运行它们没有任何问题。
但是,当我尝试在 Visual Studio 2015 中运行我的代码时,显示效果很好,但我偶然发现了一个名为
的错误检测到堆损坏:在(某个地址)的正常块 #138 之后
我找不到错误在哪里,因为它显示了一个指针的地址,这对我来说更难调试。
我正在尝试合并 2 个 void 指针数组的数据。
void unionAnimalArray(VoidPtr* animalArray, int size, VoidPtr* animalArray2, int size2)
{
int sizeu;
VoidPtr *vpArray = &animalArray[0];
VoidPtr *vpArray2 = &animalArray2[0];
VoidPtr *end = &animalArray2[size2];
VoidPtr *su = new VoidPtr[12];
su = animalArray;
sizeu = size;
VoidPtr tempu;
bool check;
while (vpArray2 != end)
{
do
{
tempu = *vpArray2;
check = true;
for (int j = 0; j<size; j++)
{
if (j == 0)
vpArray = &animalArray[0];
if (*(static_cast<Animal*>(tempu)) == *(static_cast<Animal*>(*vpArray)))
{
check = false;
break;
}
++vpArray;
}
if (!check)
++vpArray2;
} while (!check && vpArray2 != end);
if (vpArray2 != end)
{
vpArray = &su[sizeu];
*vpArray = tempu;
++sizeu;
++vpArray2;
}
}
cout << "The union is" << endl;
cout << "\t{";
printAnimalArray(su, sizeu);
delete[]su;
}
【问题讨论】:
-
最有可能出现未定义的行为。
标签: c++ visual-studio-2012 heap-memory