Как инициализировать и массив malloc указывать на C - PullRequest
0 голосов
/ 28 марта 2010

Похоже, у меня утечка памяти при попытке инициализировать массив указателей. Это мой код:

void initLabelTable(){
    register int i;
    hashNode** hp;
    labelHashTable = (hashNode**) malloc(HASHSIZE*sizeof(hashNode*));
    hp = labelHashTable;
    for(i=0; i<HASHSIZE; i++) {
        *(hp+i) = NULL;
    }
}

Обновление:

У меня есть этот код:

c = fgetc(fp);

printf("%c",c);
line[MAXIMUM_LINE_LENGTH] = '\0';

initLabelTable();
c = fgetc(fp);

Я получаю ошибку сегментации в последнем ряду, хотя первый getc завершается успешно. Когда я смотрю fp, я вижу другой адрес. Есть идеи?

1 Ответ

1 голос
/ 28 марта 2010

Нет, эта функция сама по себе не пропускает память. Он выделяет память для labelHashTable, что, согласно его названию, является тем, что он должен делать.

Убедитесь, что память, на которую указывает labelHashTable, освобождается после того, как вы закончили ее использовать, иначе у вас будет утечка памяти. Также не звоните initLabelTable() повторно, не освобождая labelHashTable перед каждым последующим вызовом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...