gpt4 book ai didi

c - 试图将变量传递给子进程

转载 作者:太空宇宙 更新时间:2023-11-04 03:51:33 26 4
gpt4 key购买 nike

我正在尝试将变量传递给一个 fork 的函数,大多数似乎都可以工作,但我需要给每个变量一个 ID,我试图将其传递到一个之前未声明的 argv[5] 中。我的代码一直出现段错误,我不知道为什么。有什么想法吗?

主要

char* arg_list_consumer[] = {
"./consume",
argv[1],
argv[2],
NULL
};
char* arg_list_producer[] = {
"./produce",
argv[1],
argv[2],
argv[3],
argv[4],
argv[5],
NULL
};
if (getppid()==1){
producerID=0;
}
if(producerID==0){
for(i=1; i<P; i++){
sprintf(arg_list_producer[5], "%d", i);
spawn ("./produce", arg_list_producer);
}
for(i=0; i<C; i++){
sprintf(arg_list_consumer[5], "%d", i);
spawn ("./consume", arg_list_consumer);
}
}

生成

int spawn (char* program, char** arg_list)
{
pid_t child_pid;
/* Duplicate this process. */
child_pid = fork();

if (child_pid != 0)
/* This is the parent process. */
return child_pid;
else {
/* Now execute PROGRAM, searching for it in the path. */
execvp (program, arg_list);
/* The execvp function returns only if an error occurs. */
fprintf (stderr, "an error occurred in execvp\n");
abort ();
}
}

最佳答案

arg_list_consumer 声明为只有 4 个条目。因此,用 [5] 对其进行索引是无效的内存操作。

如果你想给 arg_list_consumer[5] 赋值,你必须声明这个数组至少有 6 个指针大小(或者你可以抛出更多的 NULL 来使它有至少 6 个指针的大小).

然后,如果你想使用 sprintf 来存储一些东西,你必须已经在目标字符串中分配了空间。由于您只有一个指针数组,这意味着您必须使用 malloc 来分配一些空间:

arg_list_consumer[5] = malloc(sizeof(char)*10);
sprintf(arg_list_consume[5], "%d", i);

(我使用了 10,但显然您应该使用您认为必要的任何长度)。

关于c - 试图将变量传递给子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20307171/

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