鱼C论坛

 找回密码
 立即注册
查看: 2240|回复: 2

[已解决]C语言在linux环境下运行出现munmap_chunk:invalid poiter

[复制链接]
发表于 2019-4-22 20:10:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 13256068488 于 2019-4-22 20:11 编辑

程序要求:输入字符串的里面若含有“kusa”,则删除最初出现的“kusa”,然后输出原字符串与删除后的字符串。如果没有“kusa”就直接输出输入的内容。
在linux程序下执行。可以正确输出结果 不过会有munmap_chunk:invalid poiter错误,然后程序中止。自己是初学,所以指针哪里用发错了。有知道的可以帮忙指正一下吗
ps:因为是学校布置的作业。所以main函数不可以修改。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. char* remove_kusa(char lyric[]) {
  5.        
  6.         char *p ;
  7.                
  8.         char temp_kusa[] = "kusa";
  9.         char* result;
  10.         int position;
  11.         char *fore,*aft;
  12.         result = strstr(lyric,temp_kusa);
  13.         if (result == NULL)
  14.                 p = lyric;
  15.         else
  16. {
  17.                 position = result - lyric;
  18.                 lyric[position] = '\0';
  19.                 fore = &lyric[0];
  20.                 aft = &lyric[position+4];
  21.                 p = strcat(fore,aft);
  22. }
  23.         return p;
  24. }

  25. int main(int argc, char *argv[]) {
  26.   char *lyric = argv[1];
  27.   char *removed;
  28.   printf("%s\n", lyric);
  29.   removed = remove_kusa(lyric);
  30.   printf("%s\n", removed);
  31.   free(removed);
  32. }
复制代码

最佳答案
2019-4-22 21:45:07
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. char *remove_kusa(char lyric[])
  5. {
  6.         char *result;
  7.         char *str = malloc(strlen(lyric) + 1);
  8.         strcpy(str, lyric);
  9.         if ((result = strstr(str, "kusa")) != NULL)
  10.         {
  11.                 str[result - str] = '\0';
  12.                 strcat(str, result + 4);
  13.         }
  14.         return str;
  15. }

  16. int main(int argc, char *argv[])
  17. {
  18.         char *lyric = argv[1];
  19.         char *removed;
  20.         printf("%s\n", lyric);
  21.         removed = remove_kusa(lyric);
  22.         printf("%s\n", removed);
  23.         free(removed);
  24.         return 0;
  25. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-4-22 21:45:07 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. char *remove_kusa(char lyric[])
  5. {
  6.         char *result;
  7.         char *str = malloc(strlen(lyric) + 1);
  8.         strcpy(str, lyric);
  9.         if ((result = strstr(str, "kusa")) != NULL)
  10.         {
  11.                 str[result - str] = '\0';
  12.                 strcat(str, result + 4);
  13.         }
  14.         return str;
  15. }

  16. int main(int argc, char *argv[])
  17. {
  18.         char *lyric = argv[1];
  19.         char *removed;
  20.         printf("%s\n", lyric);
  21.         removed = remove_kusa(lyric);
  22.         printf("%s\n", removed);
  23.         free(removed);
  24.         return 0;
  25. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-23 09:50:44 | 显示全部楼层

谢谢大佬!仔细看了一下学到了很多.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-7 04:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表