C:free() - glibc 无效指针



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

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: %sn", temp);
while(*temp){
    if(*temp != ' ' && *temp != 't' && *temp != 'n'){
        blank = 0;  
        break;
    }
    temp++;
}

    free(temp);
return blank;

}

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

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

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

temp++;

while 循环中执行(零次或多次),因此 temp 的值可能被修改了。

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

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

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

char* original = temp;

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

相关内容

  • 没有找到相关文章

最新更新