Программа убита во время тестирования - PullRequest
0 голосов
/ 01 апреля 2011

Когда я запускаю свою программу, я получаю сообщение Killed с некоторой информацией о скрипте.Проведя некоторое исследование этой проблемы, я обнаружил, что не удаляю свои динамически размещенные переменные (глупо!).Тем не менее, теперь я чувствую, что позаботился об этой проблеме, но я все еще получаю сообщение Killed в терминале, когда использую Linux.

    //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 управляет размером хеш-таблицы.Второй цикл определяет, какие данные файла будут использоваться для хеширования.И для этого создается объект хеш-таблицы.Последний цикл вызывает хеш-функции.Затем статистика выводится в файл с помощью функции вывода.Затем я использую функцию, аналогичную деструктору, чтобы удалить динамические переменные из моего класса.Я не могу использовать деструктор, чтобы сделать это, потому что он дал мне ошибки за это.Затем я удаляю объекты.

Что я могу сделать?

Ответы [ 2 ]

1 голос
/ 02 апреля 2011

Если вы работаете в Linux, вы можете использовать valgrind с этим

valgrind myprogram

Он будет медленно, но сообщать о многих проблемах с памятью. Если вы все еще не нашли его, вы можете создать профиль в массиве

valgrind --tool=massif myprogram
ms_print <profile_output_file>

Это создаст график использования памяти во времени и наибольших выделений памяти в несколько моментов моментального снимка (включая точные следы стека того, где они были выделены).

Да, сборка с использованием gcc -g для отладочной информации

0 голосов
/ 02 апреля 2011

В показанном коде вы вызываете new, а затем delete четыре раза для объектов двух типов.Это выглядит довольно неплохо , если деструкторы Array_HashTable и LinkedList_HashTable правильно освобождают любую память, выделенную их объектами.

Если вы все еще теряете память изэтот код, эти объекты будут моим первым подозреваемым.

...