c - 自由 char*,当在 C 中作为 void 传递时

标签 c pointers casting char

我有这个功能

void clean_strs(void *p){
    if (!p){
        printf("Clean str ptr that is NULL !!\n");
        fflush(stdout);
        return;
    }
    char *a = (char*)p;
    free(a);
    a = NULL;
}

然后像这样传入一个指针:

char *a = malloc(4*sizeof(char));
// check if memory was allocated
if(a) {
    a = "asd\0";
    clean_strs(a);
    a = NULL;
    if(a) {
        getchar();
    }
}

产生信号 SIGABORT。有人可以解释为什么强制转换和释放动态分配的指针是错误的吗?

最佳答案

您没有释放动态分配的指针。你释放了一个指向常量的指针:

a = "asd\0";

您刚刚用指向字符串常量的指针替换了从 malloc 获得的值。除了从 malloc 获得的指针外,您不能释放任何指针。

你可能想要:

strcpy (a, "asd");

关于c - 自由 char*,当在 C 中作为 void 传递时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28933377/

相关文章:

来自 String 的 Java 类型类异常

casting - Solidity: 错误:请将数字作为字符串或 BN 对象传递以避免精度错误

c - 如何通过检查分隔符在字符串中添加字符?

android - 为什么 openSL 在使用麦克风时不报告??? (安卓4.4)

iphone - Objective-c 指针

c++ - 从类继承,在不同的命名空间中定义

类的 Java 转换接口(interface)

python - 在给定时间/样本量下,频率 f1 和 f2 之间呈指数变化的正弦波

c - 使用腻子

c - 获取未初始化指针的地址是未定义的行为吗?