как исправить 'ошибку подтверждения чанка mremap' в C - PullRequest
0 голосов
/ 01 февраля 2019

В настоящее время я изучаю C и пытаюсь расширить объем памяти, доступный для массива структур.Когда я пытаюсь увеличить массив, я получаю следующую ошибку во время выполнения

malloc.c:2852: mremap_chunk: Assertion `((size + offset) & (GLRO (dl_pagesize) - 1)) == 0' failed. Aborted.

Вот код, который вызывает проблему.

Я попытался прочитать справочную страницу по realloc и интерактивные учебные пособия, но не смог найти ничего, касающегося этого конкретного случая.

typedef struct _hash{
        int times;
        char word[250];
        struct _hash *n;
}Hash;

int main(){
        Hash* temp;
        int currentMax=10;
        Hash* ptr[currentMax];
        for(int i=0; i<10;i++){
                ptr[i]=malloc(sizeof(ptr));
                strcpy(ptr[i]->word, "hello world");
                ptr[i]->times=1;
                ptr[i]->n=NULL;
        }
        temp=realloc(ptr, 3*sizeof(Hash));
}

Я ожидаю, что массив увеличится на размериз трех, чтобы я мог добавить дополнительные элементы позже, но я продолжаю получать ту же ошибку.

1 Ответ

0 голосов
/ 01 февраля 2019
ptr[i]=malloc(sizeof(ptr));

Вы размещаете неправильный размер здесь.Это должно быть

ptr[i]=malloc(sizeof(*ptr[i]));

или

ptr[i]=malloc(sizeof(Hash));

Из-за этого вы впоследствии переполняете свой буфер и вызываете неопределенное поведение.

Вы должны рассмотреть возможность компиляции вашей программыс -g (чтобы включить символы отладки) и запустить его под valgrind.Подобные ошибки будут немедленно выявлены.

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