Кажется, что проблем довольно много.
Я думаю, get_data
и fill_data
должны быть одной и той же функцией? (Но тогда почему один теряет силу, в то время как другой возвращает статус?)
Прежде всего, malloc()
может потерпеть неудачу и вернуть NULL
. Всегда проверяйте возвращаемое значение malloc()
и убедитесь, что распределение не завершилось неудачей.
Во-вторых, в get_data()
вы выделяете некоторую память с помощью char* temp = (char*)malloc(len * 1);
и используете char *temp
, чтобы указать на нее. Но затем вы фактически отбрасываете эту память и вместо этого temp
указывает на строку "fill_data_with_something"
. В этом конкретном случае распределение памяти в get_data()
было совершенно ненужным. И память, которая была mallo c 'd, безвозвратно теряется и становится утечкой памяти!
В-третьих, вы копируете 256 байтов из буфера, который содержит только "fill_data_with_something"
, который определенно меньше, чем 256. Таким образом, вы читаем за пределами буфера. Вы должны только скопировать strlen(temp)
байт.
Хуже всего то, что вы затем пытаетесь free()
указатель, который не приходит от malloc()
. Это вызывает неопределенное поведение.