プロジェクトでは、同時に実行する複数のプログラムの複数のインスタンスを起動できなければなりません。これを行うために、私はexecle
を使用して、必要に応じていくつかのパラメータを渡すことができます。ここでは(おおよそ)私のコードです:execleがループで呼び出されたときに悪いアドレスを返す
char **my_env;
if(argc == 10){
my_env[0] = malloc(20+sizeof(argv[9]));
my_env[1] = NULL;
snprintf(my_env[0], 20+sizeof(*argv[9]), "PREFIXE=%s", argv[9]);
}else{
my_env[0] = NULL;
}
for(i=1; i <= n; i++){
if((pid=fork()) == 0){
execle(first_program, first_program, some_args, ..., (char *) 0, my_env);
perror("Error at first_program's launch");
exit(1);
}else{
if((pid = fork()) == 0){
execl(second_program, second_program, some_args, ..., (char *) NULL, my_env);
perror("Error at second_program's launch");
exit(1);
}
}
}
execle(third_program, third_program, some_args, ..., (char *) NULL, my_env);
perror("Error at third_program's launch");
exit(1);
私の問題はn
が1より大きい場合my_env
がNULL
かではありませんweither、second_programとthird_programためexecleが悪いアドレスを返します。
私がexecl
に置き換えたとき、すべて正常に機能します。
'...'あなたのコード内でコンパイルエラーが発生します。したがって、使用している実際のコードは表示されません。おそらくあなたの本当のコードはあなたがここに投稿したものではありません。 – nos
私は明らかにそれらを私の実際のコードに持っていません。さもなければ、execlでも動作しません。 – systemasis
問題はあなたが 'my_env'を設定しているところにあります。 'char * my_env [2];'が必要なので、いくつかのポインタがあります。 –