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