c: free() - glibc 无效指针

标签 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;

}

我正在遍历字符串并将它们与每个空格进行比较,但是当我释放临时值时,它给了我一个 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);

关于c: free() - glibc 无效指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28270208/

相关文章:

c - 在c中多次分配同一变量

c - Project Euler Number 160 - C 语言尝试

Android - 使用 C 语言的服务器代码进行服务器套接字连接?

c - C语言中的大数

c++ - 这两行代码有什么区别

c - 二维动态分配

C 帮助解释 calloc segfault

c - 我试图将一个字符串解析为不同的单词,稍后尝试释放它们,但其中 2 个字符串具有相同的字节地址

C - libcurl - 如何在不使用 CURLOPT_XFERINFOFUNCTION 的情况下获取 dltotal

c - 单链表结构插入/删除多个空闲