我有以下功能:
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);
当我为它分配一个返回的指针时,我是否必须给malloc()
该变量var
,因为该指针已经被malloc()
编辑了?
我的问题是:
在函数内部使用的最佳方法是malloc()
什么?
malloc()
如果我选择第 4 个选项,在将返回的指针分配给变量之前,我是否必须对其进行赋值?