Ошибка в createIntObject
, где вы возвращаете указатель на параметр функции:
object_t* createIntObject(int value) { /* deobfuscated */
object_t* object = malloc(sizeof(object_t));
object->data = &value; // <--
return object;
}
Доступ к указателям на локальные переменные (включая параметры функции) после возвращения функции приводит к неопределенному поведению. Вместо этого выделите место для целочисленного значения с помощью malloc
и присвойте его object->data
.
Это распространенная ошибка новичка. Для получения дополнительной информации обратитесь к справочному вопросу или тегу local-variable .
Несколько других примечаний: если вы используете printf
и malloc
, вы должны #include <stdio.h>
и #include <stdlib.h>
.
Убедитесь, что ваш компилятор настроен на распознавание этих ошибок по умолчанию. Например, если вы не абсолютно уверены в внутренностях компилятора и стандарте C, хорошей идеей будет компилировать ваши программы с помощью gcc -std=c99 -pedantic -Wall -Werror
.
Кроме того, успешная программа возвращает 0 по соглашению и код ошибки в противном случае.