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

#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/

相关文章:

r - 如何按日期对数据框进行排序。但日期列在宿舍

typescript - vue3 vite 别名无法按预期使用 typescript

c - C如何计算混合的int和float数据类型

ios - 'CC_MD5' is deprecated : first deprecated in

c# - Powershell 到 C# 语法转换

python - youtube_dl - 无法阻止发布错误日志

java - 为什么 UriComponentsBuilder 忽略空查询参数?

c# - 了解 "await"在异步方法中的用法

django - 使用 drf-spectacular 为 django API 定义组件模式

css - 在 MUI v5 中更改抽屉的颜色