【发布时间】:2018-03-20 04:00:22
【问题描述】:
我正在编写一个释放指针数组的函数,但是当我调用该函数时,出现运行时错误“双重释放或损坏(fasttop)”。该函数的目的是清除从输入文件中获取数据的数组,如果文件已经打开并且再次调用 fillArray 函数。
这是导致问题的函数:
void freeArray(Country ** g_countryArray)
{
for (int i = 0; i < g_arrsz; ++i)
{
delete [] g_countryArray;
}
}
据我所知,如果在程序的任何地方调用它,都会导致程序崩溃。我已经运行了调试器,但没有足够的经验来理解输出。如果有帮助,我可以从中发布信息。
【问题讨论】:
-
为什么要多次删除同一个指针?这是没有意义的。一个就够了;第二次表现出未定义的行为。
-
您的问题是
g_arrsz是>1。那,你的函数几乎肯定会做错事,因为它删除了一个指针数组,而不是指针指向的内容。好吧,实际上您的问题似乎是您不知道任何 C++ 或 C 并且正在使用指向指针的指针。不用等!您的直接问题是缺少minimal reproducible example。基本上你有 99 个问题,而这个问题不能解决所有问题。 -
感谢您指导制定更好的答案。是的,我正在学习 C++,所以不,我不是专家。为什么你暗示指向指针的指针不好?这是用于类分配,使用指向指针的指针是要求的一部分...
-
另外,'它删除一个指针数组而不是指针指向的内容'是什么意思?我需要删除指针的地址,而不是指针本身吗?
-
看起来您正在尝试使用数组数组。很可能您必须先删除所有内部维度数组,然后再删除外部维度数组。这只是猜测。要提供真正的答案,我们需要minimal reproducible example。
标签: c++ pointers memory-management memory-leaks