gpt4 book ai didi

c - 在循环中调用时,excel 返回错误地址

转载 作者:太空宇宙 更新时间:2023-11-04 10:30:17 25 4
gpt4 key购买 nike

对于一个项目,我必须能够启动几个程序的多个实例以同时运行。为此,我使用 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,second_program 和 third_program 的 execle 都会返回错误地址.

当我用 execl 替换它们时,一切正常。

最佳答案

您永远不会为 my_env 初始化内存。你告诉编译器

char **my_env;

这意味着 my_env 是指向 char * 指针数组的指针 *。好吧……但是紧接在那个声明之后,my_env 有一个随机值,所以它是一个指向随机内存的指针。它指向的数组在哪里?您还没有创建这样的数组,您只是声明了一个指向数组的指针。

然后您只需使用 my_env,或者像这样

my_env[0] = ...;

这意味着“将值...写入my_env 指向的数组的第一个条目”...再说一次,什么数组?你的 my_env 没有指向任何数组!

要么你必须为 my_env 提供静态内存:

char * my_env[2] = { NULL, NULL };

或动态:

char ** my_env = calloc(sizeof(char *), 2);
// ... and when you are done with it ...
free(my_env);

关于c - 在循环中调用时,excel 返回错误地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40285923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com