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;
}
請提供[mcve]。 – BLUEPIXY
你忘了null-terminate newStr。 –
當調用任何堆分配函數時:(malloc,calloc,realloc)1)總是檢查(!= NULL)以確保操作成功。 2)返回的類型是'void *',因此可以分配給任何指針。在調用'realloc()'時,不要將返回的指針指向目標變量,直到檢查(!= NULL)後才能確保操作是成功的。否則,原始指針會丟失,導致內存泄漏 – user3629249