use*_*871 11 c memory malloc free dynamic
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* f(void) {
char *x;
x = malloc(sizeof(char) * 4);
strcpy(x, "abc");
return(x);
}
int main(void) {
char *a;
a = f();
printf("%s", a);
free(a);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
是否x必须释放函数中的变量?如果是这样,当我需要退货时,这怎么可能呢?
Ed *_* S. 10
是否必须释放函数中的变量x?
是的(有点,见我后来的评论).每次通话都malloc需要稍后拨打电话free.否则,你有泄漏.但请记住; 你不是"自由x",你正在释放x所指的记忆.
当您返回值的x一个副本(地址)并返回给调用者时. 声明具有自动存储持续时间.它所指的内存必须被释放.xx
如果是这样,当我需要返回时,这怎么可能.
您的设计将责任放在呼叫者身上以释放内存.你已经完成了这个.当然,使用此方法需要您记录该函数,以便代码的用户知道他们正在接收动态分配的内存地址.
更好的方法(IMO)是将缓冲区作为输入参数.现在很清楚谁负责管理这个内存(即调用者).也许我甚至不想动态分配它.有了这个设计,这是我的选择.
void f(char *buf, size_t buf_size) {
strncpy(buf, "abc", buf_size - 1);
buf[buf_size-1] = '\0';
}
Run Code Online (Sandbox Code Playgroud)
另外,您应该始终检查返回值malloc.它可能会失败,在这种情况下将返回空指针.此外,sizeof(char)保证符合1标准,所以你可以删除该位,然后说malloc(n).
| 归档时间: |
|
| 查看次数: |
8789 次 |
| 最近记录: |