由于地址错误导致执行失败
Exec fails due to Bad Address
我有一个严重的问题 exec.I 我已经尝试了 list(execl) 和 array(execv) 的两个选项,但是问题 remains.I 将给出我尝试制作的函数电话。
#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的其他位置包含测试程序的一些参数。
所以,测试永远不会 运行s(当我从命令行 运行 它没问题时)并且 perror 显示消息 "The problem in exec is: Bad Address."
我也试过转换所有参数(const char*)但没有任何改变。
这是参数的问题吗?或者这是可执行文件的问题?
mcount
是 3,所以 wparams
指向一个包含三个元素的数组 - wparams[0]
、wparams[1]
和 wparams[2]
.
然后您访问 wparams[3]
,它是无效的并且包含垃圾。
不要尝试访问不存在的数组元素。
您的问题出在这一行:
execl(cwd,
wparams[0],
"-i", infile, "-o", outfile, "-f", offset, "-n", pntr,
"-a", wparams[1], wparams[2], wparams[3], (char*) NULL);
您正在尝试发送不存在的 wparams[3]!它是 wparam
数组的第 4 个元素,您在变量 mcount
.
的初始化中明确将其定义为数组 [3]
我有一个严重的问题 exec.I 我已经尝试了 list(execl) 和 array(execv) 的两个选项,但是问题 remains.I 将给出我尝试制作的函数电话。
#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的其他位置包含测试程序的一些参数。
所以,测试永远不会 运行s(当我从命令行 运行 它没问题时)并且 perror 显示消息 "The problem in exec is: Bad Address."
我也试过转换所有参数(const char*)但没有任何改变。 这是参数的问题吗?或者这是可执行文件的问题?
mcount
是 3,所以 wparams
指向一个包含三个元素的数组 - wparams[0]
、wparams[1]
和 wparams[2]
.
然后您访问 wparams[3]
,它是无效的并且包含垃圾。
不要尝试访问不存在的数组元素。
您的问题出在这一行:
execl(cwd,
wparams[0],
"-i", infile, "-o", outfile, "-f", offset, "-n", pntr,
"-a", wparams[1], wparams[2], wparams[3], (char*) NULL);
您正在尝试发送不存在的 wparams[3]!它是 wparam
数组的第 4 个元素,您在变量 mcount
.