#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
char* test() {
char* s = "Hello World";
size_t len = strlen(s);
char* t = malloc(sizeof(char)*(len+1));
strcpy(t, s);
free(t);
return t;
};
int main(void) {
printf("%s\n", test());
return 0;
};
我想在函数内部分配和取消分配内存。我测试了这段代码并且有效,但我想知道:
main
中使用已释放指针的值是好的做法吗?最佳答案
一旦对指针调用free
,它指向的内存就不再有效。尝试使用指向已释放内存触发器的指针 undefined behavior .在这个特殊的案例中,它碰巧起作用了,但不能保证。
如果函数返回分配的内存,调用者有责任释放它:
char* test() {
char* s = "Hello World";
size_t len = strlen(s);
char* t = malloc(sizeof(char)*(len+1));
strcpy(t, s);
return t;
};
int main(void) {
char *t = test();
printf("%s\n", t);
free(t);
return 0;
};
https://stackoverflow.com/questions/69481670/