C++ 自定义 Shell 周期性错误地址
C++ Custom Shell Periodic Bad Address
只是为了详细说明标题,当调用 execvp() 时,我得到了非常周期性的随机错误地址。
我可以回显,使用 nano,cd,但每隔一段时间我就会被错误的地址击中。
我正在使用字符串向量,将字符串向量更改为 const char **,并在末尾附加 null。似乎 null 并不总是被读取。
感谢任何帮助。
参考代码:
int parse::sh_execute()
{
const char **argv = new const char* [tokens.size()+1];
for (int i = 0; i < tokens.size(); ++i)
{
argv[i] = tokens[i].c_str();
}
argv[tokens.size()+1] = NULL;
pid_t pid, wpid;
pid = fork();
int status;
if (pid < 0)
{
perror("fork error");
exit(EXIT_FAILURE);
}
else if(pid == 0)
{
//child process
if(execvp(argv[0], (char **)argv)== -1)
{
perror("Child process error" );
}
exit(EXIT_FAILURE);
}
else
{
do
{
wpid = waitpid(pid, &status, WUNTRACED);
}
while (!WIFEXITED(status) && !WIFSIGNALED(status));
}
return 1;
}
int parse::sh_cd()
{
if (tokens.size() == 1)
{
std::cout << "Error: No argument for cd" << std::endl;
}
else
{
int rc = chdir(tokens[1].c_str());
if (rc < 0)
{
printf ("Error changing directory: %s\n",strerror(errno));
}
}
return 1;
}
N.M。指出意外的缓冲区溢出。谢谢。
只是为了详细说明标题,当调用 execvp() 时,我得到了非常周期性的随机错误地址。
我可以回显,使用 nano,cd,但每隔一段时间我就会被错误的地址击中。
我正在使用字符串向量,将字符串向量更改为 const char **,并在末尾附加 null。似乎 null 并不总是被读取。
感谢任何帮助。
参考代码:
int parse::sh_execute()
{
const char **argv = new const char* [tokens.size()+1];
for (int i = 0; i < tokens.size(); ++i)
{
argv[i] = tokens[i].c_str();
}
argv[tokens.size()+1] = NULL;
pid_t pid, wpid;
pid = fork();
int status;
if (pid < 0)
{
perror("fork error");
exit(EXIT_FAILURE);
}
else if(pid == 0)
{
//child process
if(execvp(argv[0], (char **)argv)== -1)
{
perror("Child process error" );
}
exit(EXIT_FAILURE);
}
else
{
do
{
wpid = waitpid(pid, &status, WUNTRACED);
}
while (!WIFEXITED(status) && !WIFSIGNALED(status));
}
return 1;
}
int parse::sh_cd()
{
if (tokens.size() == 1)
{
std::cout << "Error: No argument for cd" << std::endl;
}
else
{
int rc = chdir(tokens[1].c_str());
if (rc < 0)
{
printf ("Error changing directory: %s\n",strerror(errno));
}
}
return 1;
}
N.M。指出意外的缓冲区溢出。谢谢。