我有一个类似 C 语言的代码库,其中有一个需要返回 char * 的函数。有没有办法修改此代码,以便我可以返回 char * 而不会像这里一样导致内存泄漏? Glib 已经是一个依赖项,所以我也可以使用 Glib 函数。我知道代码很糟糕,它是由具有物理学位的人而不是工程师编写的。
char *func(int val) {
char *name = malloc(300);
if (!name) return NULL;
switch(value) {
case 0:
{
name = "dog";
}
break;
case 1:
{
name = "cat";
}
break;
case 2:
{
name = "elephant";
}
break;
default:
name = "wrong entry";
return name;
}
return name;
}
您的代码显示了对字符串的非常基本的误解。您已为 300 个
char
值动态分配了一块内存。从malloc
返回的不是动态分配的数组,而是指向该动态分配的数组中第一个元素的指针。
当您分配给指针变量时,它不再指向动态分配的内存块,而是指向字符串文字。您不再有任何方法可以返回动态分配的内存。您无法释放它,因此它被泄露了。您可以使用
strcpy
(或
strncpy
)将字符串值正确复制到该内存中。
char *func(int val) {
char *name = malloc(300);
if (!name) return NULL;
switch(value) {
case 0:
strcpy(name, "dog");
break;
case 1:
strcpy(name, "cat");
break;
case 2:
strcpy(name, "elephant");
break;
default:
strcpy(name, "wrong entry");
}
return name;
}