繁体   English   中英

Stack smashing 在 function 返回时检测到错误

[英]Stack smashing detected error on function return

我正在为 C [ANSI-90] 中的 class 做一个项目

出于某种原因,我收到堆栈粉碎错误,我知道它是缓冲区溢出的 gcc 保护,或者访问据我所知不应访问的 memory。

但我找不到原因。 我发现一旦我从 function 返回它就会中止,该 function 应该只使用 strtok 将输入的第一个单词解析为命令,这就是我得到的:

    int getCommand(char *p, commands *cmd)
{
    int i = 0;
    char lineCopy[MAX_LINE_LEN];
    char *cmdName;
    strcpy(lineCopy, p);
    cmdName = strtok(lineCopy, "\t \n");
    if (cmdName != NULL)
    {
        while (cmd[i].func != NULL)
        {
            printf("%d",i);
            if (strcmp(cmdName, cmd[i].name) == 0)
                return i;
            ++i;
        }
    }
    i=-1;
    puts("return error"); /* Just to check I'm reaching here, and i do */
    return i; /* ERROR */
}

重新创建的输入示例:

111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

如果你能指出并解释我做错了什么,我会很高兴?

正如@Alexander 指出的那样,我没有为 linecopy 分配linecopy ,固定为:

char *lineCopy = malloc(strlen(p));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM