我很好奇修剪字符串的正确方法是什么以确保不会发生内存泄漏。我想这可能真的是一个基于 free() 工作原理的问题。我已经包含了我的 trim() 函数的代码。见下文。
int main()
{
char* testStr1 = strdup("some string");
char* testStr2 = strdup(" some string");
char* testStr3 = strdup("some string ");
trim(&testStr1);
trim(&testStr2);
trim(&testStr3);
free(testStr1); // no memory leak
free(testStr2); // possible memory leak?
free(testStr3); // possible memory leak?
return 0;
}
int trim(char** pStr)
{
if(pStr == NULL || *pStr == NULL)
return FAILURE;
char* str = *pStr;
while(isspace(*str)) {
(*pStr)++;
str++;
}
if(*str == 0) {
*pStr = str;
return SUCCESS;
}
char *end = str + strlen(str) - 1;
while(end > str && isspace(*end))
end--;
*(end+1) = 0;
*pStr = str;
return SUCCESS;
}
最佳答案
您传递给 free
的指针需要完全您从 malloc
(或 calloc
或 realloc
),而不仅仅是指向 malloc
返回的内存区域的指针。因此,您的第二个字符串是导致问题的字符串。您的第一个和第三个很好,因为您传递给 free
的指针与您从 malloc
收到的指针匹配(通过 strdup
)。
然而,在这种情况下,您得到的并不是真正的内存泄漏——它是未定义的行为。
关于c - 字符串修剪导致内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3756219/