2017-10-08 311 views
0

我建立一个函数,将在我写的函数的工作文字删除一个字,Çrealloc的 - 内存不分配为我设置

但是从某些原因,存储更多的则是我后,我分配等等完成它打印没有字,但符号和胡言乱语的新字符串。

请帮我理解为什么以及如何修复它,谢谢。

时,我很快就调试内存的变化,因为我用这个:

newStr[k] = str[i]; 



char * newText(char * word, char *str) 
{ 
int count = 0, indexS = -1,indexE = -1; 
char *newStr = (char*)calloc(1,sizeof(char)); 
int w = 0, k = 0,i,i2; 
if(strlen(word) > strlen(str)) 
    printf("Error: the word dosent exist"); 
else 
{ 
    for (i = 0; i < strlen(str); i++) 
    { 
     if (str[i] != word[w]) 
     { 
      newStr[k] = str[i]; 
      k++; 
      newStr = realloc(newStr, k + 1); 
     } 
     else 
     { 
      i2 = i; 
      while (str[i2] != ' ' && str[i2] != '\0') 
      { 
       if (str[i2] == word[w]) 
       { 
        count++; 
        w++; 
        i2++; 
       } 
       else 
       { 
        count = -1; 
        break; 
       } 

      } 
      if (strlen(word) == count) 
      { 
       i = i2; 
       if (str != '\0') i++; // space 
      } 
      else 
      { 
       newStr[k] = str[i]; 
       k++; 
       newStr = realloc(newStr, k + 1); 
      } 
      count = 0; 
      w = 0; 
     } 
    } 
} 
str[k] = '\0'; 
return newStr; 
} 
+1

请提供[mcve]。 – BLUEPIXY

+3

你忘了null-terminate newStr。 –

+1

当调用任何堆分配函数时:(malloc,calloc,realloc)1)总是检查(!= NULL)以确保操作成功。 2)返回的类型是'void *',因此可以分配给任何指针。在调用'realloc()'时,不要将返回的指针指向目标变量,直到检查(!= NULL)后才能确保操作是成功的。否则,原始指针会丢失,导致内存泄漏 – user3629249

回答

3

你在最后追加'\0'字符错误的字符串,然后返回:

str[k] = '\0'; 

使其:

newStr[k] = '\0';