c - 字符串修剪导致内存泄漏?

标签 c string memory-leaks trim

我很好奇修剪字符串的正确方法是什么以确保不会发生内存泄漏。我想这可能真的是一个基于 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(或 callocrealloc),而不仅仅是指向 malloc 返回的内存区域的指针。因此,您的第二个字符串是导致问题的字符串。您的第一个和第三个很好,因为您传递给 free 的指针与您从 malloc 收到的指针匹配(通过 strdup)。

然而,在这种情况下,您得到的并不是真正的内存泄漏——它是未定义的行为。

关于c - 字符串修剪导致内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3756219/

相关文章:

c++ - 短整数的格式说明符

c - 如何在gdb中附加多个正在运行的进程?

Javascript - 在字符串中添加缺少的括号

python - 从python中的字符串中提取未知子字符串

ios - 主队列中将 CIImage 转换为 CGImage 时发生泄漏

c - 如果程序即将退出,释放分配的内存真的很重要吗?

c - GCC 在编译时不发出警告

C语言isMagicsquare函数: What logic error is in my function code?

Java 拆分目标路径与\

java - Glassfish 中的 ThreadLocal 内存泄漏