鱼C论坛

 找回密码
 立即注册
查看: 1826|回复: 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函数不可以修改。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* remove_kusa(char lyric[]) {
        
        char *p ;
                 
        char temp_kusa[] = "kusa";
        char* result; 
        int position;
        char *fore,*aft;
        result = strstr(lyric,temp_kusa);
        if (result == NULL)
                p = lyric;
        else 
{
                position = result - lyric;
                lyric[position] = '\0';
                fore = &lyric[0];
                aft = &lyric[position+4];
                p = strcat(fore,aft);
}
        return p;
}

int main(int argc, char *argv[]) {
  char *lyric = argv[1];
  char *removed;
  printf("%s\n", lyric);
  removed = remove_kusa(lyric);
  printf("%s\n", removed);
  free(removed);
}
最佳答案
2019-4-22 21:45:07
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *remove_kusa(char lyric[])
{
        char *result;
        char *str = malloc(strlen(lyric) + 1);
        strcpy(str, lyric);
        if ((result = strstr(str, "kusa")) != NULL)
        {
                str[result - str] = '\0';
                strcat(str, result + 4);
        }
        return str;
}

int main(int argc, char *argv[])
{
        char *lyric = argv[1];
        char *removed;
        printf("%s\n", lyric);
        removed = remove_kusa(lyric);
        printf("%s\n", removed);
        free(removed);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

char *remove_kusa(char lyric[])
{
        char *result;
        char *str = malloc(strlen(lyric) + 1);
        strcpy(str, lyric);
        if ((result = strstr(str, "kusa")) != NULL)
        {
                str[result - str] = '\0';
                strcat(str, result + 4);
        }
        return str;
}

int main(int argc, char *argv[])
{
        char *lyric = argv[1];
        char *removed;
        printf("%s\n", lyric);
        removed = remove_kusa(lyric);
        printf("%s\n", removed);
        free(removed);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢大佬!仔细看了一下学到了很多.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-3 17:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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