утечка памяти или другая проблема в C ++ и вектор строк - PullRequest
1 голос
/ 15 февраля 2011

я получаю утечки памяти каждый раз, когда запускаю эту функцию в цикле:

uint32_t *padMessages(uint32_t *messages, const std::vector<std::string> &words) 
{
    uint32_t output[16];
    uint32_t size = words.size();
    uint32_t i, x, y;

    messages = (uint32_t *)malloc(16 * size * sizeof(uint32_t));

    x = 0;
    for(i = 0; i < size; i++) {
        padMessage((uint32_t *)_strdup(words[i].c_str()), output, strlen((const char *)words[i].c_str()) * 8);
        for(y = 0; y < 16; y++) {
            messages[x] = output[y];
            x++;
        }
    }

    return messages;
}

код, вызывающий эту функцию:

do {
    for(i=0 ; i<len ; i++) 
        temp[i] = letters[entry[i]];
    temp[len] = '\0';

    // store generated word to words vector
    words[array_count] = temp;

    // increment vector counter and total word count
    array_count++;
    word_count++;

    if(array_count == 100000) {
        // reinitialize array_count
        array_count = 0;

        // pad messages
        messages = padMessages(messages, words);

        free(messages);
        free(result);

        std::vector<std::string>().swap(words);
        words.resize(100000);
    }
    for(i=0 ; i<len && ++entry[i] == nbletters; i++) entry[i] = 0;
} while(i<len);

где у меня течет память?

Ответы [ 3 ]

5 голосов
/ 15 февраля 2011

Это:

(uint32_t *)_strdup(words[i].c_str())

... выделяет память динамически, и я не вижу ни одного соответствующего вызова free для выделенной памяти.

Я бы использовал std::string повсюду.

1 голос
/ 15 февраля 2011

Вы вызываете strdup в цикле в верхней функции, и вы никогда не free 'те строки, которые вы выделяете.

0 голосов
/ 15 февраля 2011

Я думаю, что память, выделенная _strdup, не освобождается.

...