2017-10-09 94 views
0

我正在写一个函数,释放一个指针数组,但是当我调用该函数,得到运行时错误'双免费或腐败(fasttop)'。该函数的目的是清除数组,该数组从输入文件中获取数据,如果该文件已经打开并且再次调用fillArray函数。当试图清除内存在c + +双免费或腐败

这是导致问题的功能:

void freeArray(Country ** g_countryArray) 
{ 
    for (int i = 0; i < g_arrsz; ++i) 
    { 
     delete [] g_countryArray; 
    } 
} 

如果它在程序的任何地方调用,据我所知,它会导致程序崩溃。我运行了调试器,但没有足够的经验来理解输出。如果有帮助,我可以发布信息。

+1

为什么你多次删除相同的指针?这没有意义。一个就足够了;第二次展示未定义的行为。 –

+0

你的问题是'g_arrsz'是'> 1'。那么,你的函数几乎肯定会做错误的事情,因为它删除了一个指针数组,而不是指针指向的内容。实际上你的问题似乎是你不知道任何C++或C,并且正在使用指向指针的指针。没有等待!你的直接问题是缺乏[mcve]。基本上你有99个问题,这个问题不会解决所有问题。 – Yakk

+0

感谢您指导制定更好的答案。是的,我正在学习C++,所以不,我不是专家。你为什么暗示指针指针不好?这是一个类的分配,并使用指针指针是需求的一部分... –

回答

0

您遗漏了循环体中的[i]。如果单个指针指向单个Country对象,则需要删除[]

您可能还需要想要delete[]整体数组;这取决于你的其他代码。

+0

呃,谢谢。愚蠢的事情错过。 –

+0

有一个国家对象的数组,这是我需要删除,所以我相信我现在正在完成。 –

+0

@SethTaylor:你的数据类型不对应于一个'Country'对象的数组,这个对象可以由一个单一级别的Country *标识。 –

0

delete [] g_countryArray;更改为delete g_countryArray[i];

delete [] arr立即删除整个数组。

+0

好吧,在这种情况下,两条语句'delete [] g_countryArray''和'delete g_countryArray [i]'可以互换吗? –

+0

不可以互换。第一个:{删除所有数组元素};第二个:{删除第i个元素}。对于第二个你需要循环每个元素。 –