gpt4 book ai didi

c - 释放函数内部的指针,并在 main 中使用它

转载 作者:行者123 更新时间:2023-12-05 09:30:31 25 4
gpt4 key购买 nike

#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;
};

关于c - 释放函数内部的指针,并在 main 中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69481670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com