返回malloc'的替代方案;d数据在c中?
在C中,这里有一个函数:返回malloc'的替代方案;d数据在c中?,c,memory,malloc,C,Memory,Malloc,在C中,这里有一个函数: //返回人性化字节数 字符*字节转换(无符号长b_){ 浮点数b=(浮点数)b_; int n=0; 而(b/1000>=1){ b/=1000; n++; } char*buffer=malloc(32); sprintf(缓冲区,.2f%c),b,“BKMGT”[n]); 返回缓冲区; } 我只是给这个函数调用分配一个变量,然后释放它吗?如果我只想打印它,比如: int x = 123456; printf("Size: %s\n", byteconvert(x)
//返回人性化字节数
字符*字节转换(无符号长b_){
浮点数b=(浮点数)b_;
int n=0;
而(b/1000>=1){
b/=1000;
n++;
}
char*buffer=malloc(32);
sprintf(缓冲区,.2f%c),b,“BKMGT”[n]);
返回缓冲区;
}
我只是给这个函数调用分配一个变量,然后释放它吗?如果我只想打印它,比如:
int x = 123456;
printf("Size: %s\n", byteconvert(x));
如何在没有内存泄漏的情况下执行此操作?这似乎是C语言中的一个基本问题,我只是不知道正确的解决方法。我在网上发现了许多类似的帖子,但没有一篇有明确或好的解决方案。你的直觉是正确的。将
byteconvert()
返回的指针存储在变量中,并在不再需要时释放它
如何在没有内存泄漏的情况下执行此操作
使用后需要释放内存
int x = 123456;
char * temp = NULL;
temp = byteconvert(x);
printf("Size: %s\n", temp);
//after use just free it
free(temp);
如果您不想依赖调用者执行
free
,那么首先让调用者通过缓冲区
在将其用作数组索引之前,还应选中n<5
void byteconvert(unsigned long b_, char *buf, size_t buf_len )
{
...
snprintf(buf, buf_len, "%.2f%c", .....
}
还有,循环呢?我可以使用相同的变量吗?还是每次都需要释放它?每次都需要释放它。因为每次你都会叫它。它将删除新内存。