c - 在 C 中多次释放分配的 char*

标签 c pointers char malloc free

我在 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/

相关文章:

c - 递归地找到列表中的完美平方和

c - make64 high32 low32 在 Mac OS/Linux 上的功能

c - 正在释放的指针未分配给 C 中的字符串数组

将 unsigned char * 转换为 char * string C

java - 为什么像 Java 这样的语言区分字符串和字符,而其他语言则不区分?

c - 复制到缓冲区期间出现段错误

c++ - c 到 c++,在翻译中丢失

c - 如何调用union中存储的值

c - 如何在二维字符数组中存储单个字符?

c - 当使用 scanf 获取整数和 char 值时,程序会跳过 scanf