Exec не удается из-за неправильного адреса

У меня серьезная проблема с exec.Я пробовал оба варианта со списком (execl) и массивом (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 содержат некоторые аргументы для тестовой программы.

Итак, test никогда не запускается (когда я запускаю его из командной строки, все в порядке), и perror показывает сообщение «Проблема в exec: Bad Address».

Я также пытался привести все аргументы (const char *), но ничего не изменилось.
Это проблема с аргументами? Или дело в исполняемом файле?

0

Решение

mcount 3, так wparams указывает на массив с тремя элементами — wparams[0], wparams[1] а также wparams[2],

Тогда вы получаете доступ wparams[3] который является недействительным и содержит мусор.

Не пытайтесь получить доступ к элементам массива, которые не существуют.

2

Другие решения

Ваша проблема в этой строке:

execl(cwd,
wparams[0],
"-i", infile, "-o", outfile, "-f", offset, "-n", pntr,
"-a", wparams[1], wparams[2], wparams[3], (char*) NULL);

Вы пытаетесь отправить wparams [3], которого не существует! Это 4-й элемент wparam массив, и вы явно определили его как массив [3] в инициализации вашей переменной mcount,

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector