c realloc - 内存未按我设置分配

标签 c allocation 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;
}

最佳答案

您在返回之前将 '\0' 字符附加到错误的字符串末尾:

str[k] = '\0';

做到:

newStr[k] = '\0';

关于c realloc - 内存未按我设置分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46635957/

相关文章:

c - 使用for循环分配内存

c - 八进制文字的意义是什么

c++ - 如何强制重新编译 Makefile 中的单个文件?

c - FindFirstFile 和 Junctions

c++ - 内存分配是什么意思

存储来自用户的未知数量、未知大小的字符串的 C 程序 - 00558068 处的堆 block 在 00558096 处修改,过去请求的大小为 26

C-SYSMALLOC : Assertion failed (realloc)

c++ - 在分配的地址实例化结构(分配赋值)

c++ - 内存浪费?如果 main() 应该只返回 0 或 1,为什么 main 声明为 int 而不是 short int 甚至 char?

c - 使用 realloc 释放 2d 字符数组