Я хочу понять поведение возврата указателя из вызова функции. Предположим, у меня есть следующий простой код:Понимание free() буфера перед оператором return
int main(){
int i;
float *ssd;
ssd = test();
for (i = 0; i < 3; ++i) {
printf("%f, ", ssd[i]);
}
printf("\n \n");
memset(ssd, 0.0, 3*sizeof(float));
for (i = 0; i < 3; ++i) {
printf("%f, ", ssd[i]);
}
printf("\n \n");
}
float *test(){
float *buff = malloc(3* sizeof(float));
int i;
for (i = 0; i < 3; ++i) {
buff[i] = (float) (6.31 + i);
}
free(buff);
return buff;
}
Как вы видите, я создал временный буфер buff
внутри test()
. Прежде чем я вернусь, я освободил buff
перед заявлением return
. Хотя я протестировал его, и результаты были такими, как ожидалось, я не понимаю, как функция test()
может вернуть значения buff
, хотя free(buff)
есть до return
buff?
Похожие: http://stackoverflow.com/q/6441218/509868 – anatolyg
нет ничего невозможного в программе C с неопределенным поведением. – PSkocik
это неправильный код. Это приведет к коррупции. Кажется, что использование после бесплатной ошибки –