c:free() - glibc无效指针

时间:2015-02-02 02:07:49

标签: c malloc free glibc

我正在编写一些代码,在这种情况下是一个函数,可以看到一段字符串是否为空(如,包含所有空格,制表符或换行符)。我似乎无法释放临时变量而不会遇到错误。这是函数:

int isBlank(char *a){

char *temp;
int blank = 1;
int position = 0;
if( a == NULL){
    return 1;
}

temp = malloc(sizeof(char)*strlen(a)+1);
strcpy(temp,a);
//printf("string: %s\n", temp);

while(*temp){
    if(*temp != ' ' && *temp != '\t' && *temp != '\n'){
        blank = 0;  
        break;

    }
    temp++;
}


    free(temp);

return blank;

}

我遍历字符串并将它们与每个空格进行比较,但是当我释放temp时,它会给我一个glibc错误

*** glibc detected *** ./a.out: free(): invalid pointer: 0x000000000170e9f4 ***
======= Backtrace: =========

任何人都可以帮我解决这个问题,或者指出我在这里做错了什么? 谢谢

2 个答案:

答案 0 :(得分:1)

在while循环中执行

temp++;(零次或多次),因此temp的值可能已被修改。

您应该将其原始值存储在另一个指针中,并释放该指针。

temp = malloc(sizeof(char)*strlen(a)+1);
char *original_temp = temp;

while(*temp){
    // processing
    temp++;
}

free(original_temp);

答案 1 :(得分:1)

temp++使temp指针指向下一个地址。您应该保留数组的原始地址。在while循环之前添加此行:

char* original = temp;

,最后是free(original)而不是free(temp)