我在 C 中有这段代码:
char* func(char* str, int a) {
str = malloc(a * sizeof(char));
return str;
}
int main() {
char* s1 = NULL;
s1 = func(s1,4);
s1 = "123";
free(s1);
s1 = func(s1, 5);
s1 = "1234";
free(s1);
...
}
我不断收到运行时错误(好像是无限循环)
在 main()
中使用 s1
合法吗?
会不会产生内存泄漏?
最佳答案
s1 = "123";
在这里你让 s1
指向一个字符串文字,你不应该为字符串文字调用 free
.我的猜测是您打算将这些字符复制到为 s1
分配的内存中。如果是这种情况,请使用 strcpy .例如:
char* func(char* str, int a) {
str = malloc(a * sizeof(char));
return str;
}
int main() {
char* s1 = NULL;
s1 = func(s1,4);
strcpy(s1, "123");
free(s1);
s1 = func(s1, 5);
strcpy(s1, "1234");
free(s1);
...
}
关于你的第二个问题 - 你的代码中存在内存泄漏,但正是因为我已经提到的原因 - s1 = "123";
不复制字节但指向 s1
在字面上。我建议的代码应该不会发生内存泄漏。
关于c - 在 C 中多次释放分配的 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27459031/