我有一些代码:
char * itoa(int a)
{
char (*t)[16]=(char(*)[16])malloc(1*sizeof(char[16]));
sprintf(*t,"%d",a);
return *t;
}
// ...
mvwprintw(my_menu_win,i+1,2,itoa(i));
我可以在不添加临时变量的情况下从 malloc 中释放内存吗? 例如:
temp=itoa(i);
mvwprintw(my_menu_win,i+1,2,temp);
free(temp);
最佳答案
您不应该对范围受限的缓冲区使用 malloc
。
从 C99 开始,复合文字对于您可能希望保留一段时间的缓冲区的情况是一个很好的解决方案。我会去做类似的事情
char const* itoa(int a, char (*buffer)[16]) {
sprintf(*buffer,"%d",a);
return *buffer;
}
#define ITOA(A) itoa((A), &(char[16]){ 0 })
指向函数数组的指针确保传递一个包含 16
元素的缓冲区。
关于c - malloc 后释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13231165/