【问题标题】:c: free() - glibc invalid pointerc: free() - glibc 无效指针
【发布时间】:2015-03-31 22:54:29
【问题描述】:

我正在编写一些代码,在本例中是一个查看一段字符串是否为空白的函数(例如,是否包含所有空格、制表符或换行符)。我似乎无法释放临时变量而不遇到错误。这是函数:

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: =========

谁能帮助我解决这个问题或指出我在这里做错了什么? 谢谢

【问题讨论】:

    标签: c malloc free glibc


    【解决方案1】:

    temp++;在while循环中被执行(0次或多次),所以temp的值可能被修改了。

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

    temp = malloc(sizeof(char)*strlen(a)+1);
    char *original_temp = temp;
    
    while(*temp){
        // processing
        temp++;
    }
    
    free(original_temp);
    

    【讨论】:

      【解决方案2】:

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

      char* original = temp;
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-01
        • 2012-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-16
        • 1970-01-01
        • 2013-03-21
        相关资源
        最近更新 更多