Почему я получаю SIGABRT здесь (динамическое распределение)? - PullRequest
0 голосов
/ 17 декабря 2011

Может быть, кто-нибудь может мне помочь. В моем проекте я использую связанный список с динамическим размещением. И я не знаю почему, но это просто не работает: (

void insertLast (TList *list, wchar_t *string) {
    TWord *newWord;
    if ((newWord = malloc (sizeof(TWord))) == NULL)
        exit (EXIT_FAILURE);
    newWord->prev = list->tail;
    newWord->next = NULL;
    newWord->word = malloc(wcslen(string) * sizeof(wchar_t));
    wcscpy(newWord->word, string);
    if (list->tail != NULL) {
        list->tail->next = newWord;
    } else {
        list->head = newWord;
    }
    list->tail = newWord;
}

Когда я пытаюсь это скомпилировать, я просто вижу

lab: malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char  &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.

Отменено

Может быть, кто-нибудь может сказать, почему у меня такие проблемы? Спасибо:)

1 Ответ

0 голосов
/ 17 декабря 2011

Вот одна проблема:

newWord->word = malloc(wcslen(string) * sizeof(wchar_t));
wcscpy(newWord->word, string);

Вы забыли выделить место для завершающего нулевого символа.

newWord->word = malloc((wcslen(string) + 1) * sizeof(wchar_t));
...