Автор Тема: Знатоки C, объясните чудеса, пожалуйста [РЕШЕНО]  (Прочитано 2049 раз)

Оффлайн Spanish ArCher

  • Участник
  • *
  • Сообщений: 1 234
Во вложении лежит тестовый файл. Это тестовый проект для изучения работы со списками.
Компилируется в Codeblocks (на KDesktop p6 x86_64), тип проекта = Консольное приложение, все установки - по умолчанию.

Так вот.  Первый CreateNode (строка 32) создаёт узел. Всё нормально. Доходим до 2-го CreateNode (строка 36) - и тут, опаньки, на malloc (строка 46) всё рушится с такой руганью
Begin!
test2: malloc.c:3097: 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.

Process returned -1 (0xFFFFFFFF)   execution time : 0.005 s
Press ENTER to continue.


А дальше начинаются чудеса.
Чудо 1. Можно из  структуры Node убрать unsigned  int  count; и тогда всё работает.
Чудо 2. Или можно из  структуры Node убрать char word[16]; и тогда тоже всё работает.
Чудо 3 (самое чудное). Достаточно размер массива   word увеличить до 21 char word[21]; как всё начинает работать. На 20-ти еще падает, на 21 - работает.

Растолкуйте, пожалуйста, что за магическа граница размера массива..
« Последнее редактирование: 10.05.2013 16:54:06 от Spanish ArCher »
Если я попался вам навстречу, Значит вам со мной не по пути.
(С) Воскресение

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 159
    • Домашняя страница
NN=(PNode)malloc(sizeof(PNode));Выделяется память только под размер указателя (void *), а не самой структуры (struct Node).
Надо sizeof(struct Node).
« Последнее редактирование: 10.05.2013 14:48:58 от Skull »
Андрей Черепанов (cas@)

Оффлайн Spanish ArCher

  • Участник
  • *
  • Сообщений: 1 234
Да, действительно. Спасибо.
Если я попался вам навстречу, Значит вам со мной не по пути.
(С) Воскресение