自由char *,当作为C中的空格传递时

时间:2015-03-09 00:00:11

标签: 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中的结果。有人可以解释为什么铸造和释放动态分配的指针是一个错误吗?

1 个答案:

答案 0 :(得分:7)

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

a = "asd\0";

您刚刚使用指向字符串常量的指针替换了malloc中的值。你不能free任何指针,只能从malloc得到一个指针。

你可能想要:

strcpy (a, "asd");