当我运行程序时,我收到消息Killed
,其中包含有关脚本的一些信息。在对这个问题进行一些研究后,我发现我没有删除动态分配的变量(愚蠢的我!)。但是,现在,我觉得我已经处理了这个问题,但是当我使用Linux时,我仍然在终端中收到Killed
消息。
//does the of the manipulation of the load factor.
for (int tableSize = fileLength; tableSize < fileLength * 2; tableSize = tableSize + 500)
{
//creates hash tables to be reused for each of the trials.
for(int fileNum = 0; fileNum < NUMTIMES; fileNum++)
{
Array_HashTable* linear_div_hash = new Array_HashTable(tableSize);
LinkedList_HashTable *chain_div_hash = new LinkedList_HashTable(tableSize);
Array_HashTable *doubleHash = new Array_HashTable(tableSize);
LinkedList_HashTable *mult_hash = new LinkedList_HashTable(tableSize);
//Does the hashing for each of the files created.
for (int index = 0; index < fileLength; index++)
{
linear_div_hash -> Linear_ProbeDH(read[fileNum][index]);
chain_div_hash -> Division_Hash(read[fileNum][index]);
doubleHash -> Double_Hash(read[fileNum][index]);
mult_hash -> Mulitplication_Hash(read[fileNum][index]);
}//ends the index for loop.
optimalOutput("VariableSizeLinearCollisionData", fileLength, tableSize, linear_div_hash -> getCollisions(), fileAppendage);
optimalOutput("VariableSizeDoubleCollisionData", fileLength, tableSize, doubleHash -> getCollisions(), fileAppendage);
optimalOutput("VariableSizeDivisionChainingCollisionData", fileLength, tableSize, chain_div_hash -> getCollisions(), fileAppendage);
optimalOutput("VariableSizeMultiplicationChainingCollisionData", fileLength, tableSize, mult_hash -> getCollisions(),fileAppendage);
linear_div_hash -> EndArray_HashTable();
chain_div_hash-> EndLinkedList_HashTable();
doubleHash -> EndArray_HashTable();
mult_hash-> EndLinkedList_HashTable();
delete linear_div_hash;
delete chain_div_hash ;
delete doubleHash ;
delete mult_hash ;
}//ends the fileNum for loop
}//ends the parent for loop with the size as the variable.
基本上代码的工作原理如下,第一个for循环控制哈希表的大小。第二个循环控制将使用哪个文件的数据进行哈希处理。并为此实例化哈希表对象。最后一个循环调用哈希函数。然后使用输出功能将统计数据输出到文件。然后我使用类似于析构函数的函数来删除类中的动态变量。我不能使用析构函数来执行此操作,因为它给了我错误。然后我删除了这些对象。
我该怎么办?
答案 0 :(得分:1)
如果你在linux上运行,你可以使用valgrind
valgrind myprogram
它会缓慢但报告许多内存问题。如果你仍然没有找到它,你可以使用massif
堆栈它valgrind --tool=massif myprogram
ms_print <profile_output_file>
这将生成内存使用情况的图表,以及几个快照时刻内存的最大分配(包括分配位置的精确堆栈跟踪)。
哦,使用gcc -g
构建调试信息
答案 1 :(得分:0)
在展示的代码中,您在两种类型的对象上调用new
然后delete
四次。看起来非常好 如果 Array_HashTable
和LinkedList_HashTable
的析构函数正确释放了对象分配的任何内存。
如果您仍在从此代码中泄漏内存,那么这些对象将是我的第一个嫌疑人。