c++ - 由于地址错误导致执行失败

标签 c++ c exec unistd.h execl

我对 exec 有一个严重的问题。我已经尝试了 list(execl) 和 array(execv) 这两个选项,但问题仍然存在。我将给出我尝试调用的函数。

#include <unistd.h>
#include <sys/types.h>
void MyFunc(string aparams[],char* infile,char* outfile,int k,int points){

int mcount=3;
char* offset= new char[5];
sprintf(offset,"%d",k);
char* pntr=new char[5];
sprintf(pntr,"%d",points);
char* *wparams=new char*[mcount];
for (int i = 0; i < mcount; i++) {
    wparams[i] = new char[aparams[i].length() + 1];
    strcpy(wparams[i], aparams[i].c_str());
}
char *cwd; 
cwd=(char*)malloc(255); 
getcwd(cwd,255); 
strcat(cwd,"/"); 
strcat(cwd,wparams[0]);
cout << cwd << endl;
execl(cwd,wparams[0],"-i",infile,"-o",outfile,"-f",offset,"-n",pntr,"-a",wparams[1],wparams[2],wparams[3],(char*) NULL);    

cout << "exec failed" << endl;
perror("The problem in exec is:");
exit(3);

aparams[0] 包含一个带有可执行文件名称的字符串,比方说“test”。我编译了 -> g++ test.cpp -o test -> 所以我得到了这个可执行文件。 aparams 的其他位置包含测试程序的一些参数。

所以,测试永远不会运行(当我从命令行运行它时它没问题)并且 perror 显示消息“exec 中的问题是:地址错误。”

我也试过转换所有参数(const char*)但没有任何改变。 这是参数的问题吗?或者这是可执行文件的问题?

最佳答案

mcount 是 3,所以 wparams 指向一个包含三个元素的数组 - wparams[0], wparams[1] wparams[2]

然后您访问 wparams[3],它是无效的并且包含垃圾。

不要尝试访问不存在的数组元素。

关于c++ - 由于地址错误导致执行失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40732550/

相关文章:

c - C中的递归形状填充程序

c - 应该相同但会发生变化的值

c - C 中带管道的 Shell 程序

Java - 使用 exec() 方法运行另一个进程

Php Exec 外部 python 脚本 - 权限被拒绝

C++ VS2010 调试器对超出循环范围的循环变量表现异常

c++ - 生成唯一的 5 位数字

php exec() 没有执行命令

c++ - 使用 __int16(或 int16_t)优于 int 的优点/缺点

c++ - 在 main() 之前或之后声明函数有什么区别?