标题:请问这里分配内存为什么一直越界?
只看楼主
星系隐
Rank: 2
等 级:论坛游民
威 望:1
帖 子:96
专家分:36
注 册:2018-6-16
 问题点数:0 回复次数:2 
请问这里分配内存为什么一直越界?
请你设计一个可以解释字符串 command 的 Goal 解析器 。command 由 "G"、"()" 和/或 "(al)" 按某种顺序组成。Goal 解析器会将 "G" 解释为字符串 "G"、"()" 解释为字符串 "o" ,"(al)" 解释为字符串 "al" 。然后,按原顺序将经解释得到的字符串连接成一个字符串。

给你字符串 command ,返回 Goal 解析器 对 command 的解释结果。

示例 1:

输入:command = "G()(al)"
输出:"Goal"
解释:Goal 解析器解释命令的步骤如下所示:
G -> G
() -> o
(al) -> al
最后连接得到的结果是 "Goal"
示例 2:

输入:command = "G()()()()(al)"
输出:"Gooooal"
示例 3:

输入:command = "(al)G(al)()()G"
输出:"alGalooG"
 

提示:

1 <= command.length <= 100
command 由 "G"、"()" 和/或 "(al)" 按某种顺序组成

我算了半天,执行一直越界,为什么内存的长度不是我算出来的结果,应该是多少?怎么算?
char *interpret(char *command)
{
    int g = 0, k = 0, ka = 0;
    int c = strlen(command);
    int i1 = 0, i2 = 0;
    int chang=0;
    for (; i1 < c;)
    {
        if (command[i1] == 'G')
        {
            i1 = i1 + 1; //判断条件来跳过一些字母
            g = g + 1;
        }
        if (command[i1] == '(' && command[i1 + 1] == ')')
        {
            i1 = i1 + 2;
            k = k + 1;
        }
        if (command[i1] == '(' && command[i1 + 1] == 'a')
        {
            ka = ka + 1;
            i1 = i1 + 4;
        }
    }
    chang=k+g+ka*2;
    char *renhua = malloc(sizeof(char) * chang); //根据字符类型来分配内存
    i1 = 0;
    i2 = 0;
    for (; i1 < c;) //再次遍历把人话写在内存里
    {
        if (command[i1] == 'G')
        {
            renhua[i2] = 'G';
            i1 = i1 + 1;
            i2 = i2 + 1;
        }
        if (command[i1] == '(' && command[i1 + 1] == ')')
        {
            renhua[i2] = 'o';
            i1 = i1 + 2;
            i2 = i2 + 1;
        }
        if (command[i1] == '(' && command[i1 + 1] == 'a')
        {
            renhua[i2] = 'a';
            renhua[i2 + 1] = 'l';
            i1 = i1 + 4;
            i2 = i2 + 2;
        }
    }
    return renhua;
}
搜索更多相关主题的帖子: 字符串 解析 command 分配 内存 
2020-12-06 13:25
星系隐
Rank: 2
等 级:论坛游民
威 望:1
帖 子:96
专家分:36
注 册:2018-6-16
得分:0 
AddressSanitizer: heap-buffer-overflow on address 0x602000000037 at pc 0x5643ed8e3766 bp 0x7ffddf8996c0 sp 0x7ffddf8996b0
报错这个信息
2020-12-06 13:28
星系隐
Rank: 2
等 级:论坛游民
威 望:1
帖 子:96
专家分:36
注 册:2018-6-16
得分:0 
经典报错...终于搞定了,我无话可说
已完成
执行用时:0 ms
输入
"G()(al)"
输出
"Goal"
预期结果
"Goal"
stdout
5
2020-12-06 13:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-504142-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.091181 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved