【发布时间】:2015-04-24 03:44:24
【问题描述】:
我有以下功能:
char * decrypt(const char *p, int key) {
char *tmp = malloc(strlen(p) + 1);
for (int i = 0; p[i] != '\0'; i++) {
if (p[i] >= 'A' && p[i] <= 'Z') {
if (key <= p[i] - 'A')
tmp[i] = p[i] - key;
else
tmp[i] = p[i] - key + 'Z' - 'A' + 1;
} else if (p[i] >= 'a' && p[i] <= 'z') {
if (key <= p[i] - 'a')
tmp[i] = p[i] - key;
else
tmp[i] = p[i] - key + 'Z' - 'A' + 1;
}
}
return tmp;
}
我正在为临时指针*temp 分配内存:
char *tmp = malloc(strlen(p) + 1);
但我不会在任何地方释放它。
据我所知,释放内存有 4 个选项:
- 在同一范围内使用
free()(这对我来说是不可能的,因为我必须返回指针) - 使用
alloca(),并非每个编译器都支持(不是 ANSI C) -
malloc()函数外的指针并将该指针传递给函数,然后free()它在函数外 - 将返回的指针分配给一个变量并释放该变量
这是选项 #4 的代码:
char *var;
var = malloc(MAX);
var = decrypt("Hello", 1);
free(var);
当我为变量var 分配一个返回的指针时,我是否必须malloc(),因为该指针已经是malloc()ed?
我的问题是:
在函数中使用malloc() 的最佳方式是什么?
如果我选择第 4 个选项,在将返回的指针分配给它之前,我是否必须 malloc() 变量?
【问题讨论】:
标签: c function pointers malloc alloca