[英]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.