Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回malloc'的替代方案;d数据在c中?_C_Memory_Malloc - Fatal编程技术网

返回malloc'的替代方案;d数据在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)

在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));
如何在没有内存泄漏的情况下执行此操作?这似乎是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", .....
}

还有,循环呢?我可以使用相同的变量吗?还是每次都需要释放它?每次都需要释放它。因为每次你都会叫它。它将删除新内存。