gpt4 book ai didi

c - 主/从设备出现段错误

转载 作者:行者123 更新时间:2023-11-30 16:27:27 30 4
gpt4 key购买 nike

谁能向我解释一下为什么我在这段代码上遇到段错误?我一直试图弄清楚这一点,但在各种搜索中却一无所获。当我运行代码而不调用 main(argc, argv) 时,它会运行。 Slave 仅将 argv 中的 2 个数字转换为整数,然后返回它们。谢谢。

#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int main(int argc, char* argv[])
{
int i;
int* sums;
sums[argc];
pid_t cpid;
int status;
char* args[10];
int count = 1;

for(i = 0; i < (argc / 2); i++) {
cpid = fork();

if(cpid == 0) {
args[1] = argv[count];
args[2] = argv[count + 1];
execvp("./slave", args);
} else {
waitpid(cpid, &status, 0);
sums[i] = WEXITSTATUS(status);

printf("Child returned the number %d\n", sums[i]);
sprintf(argv[i+1], "%d", sums[i]);
}
count += 2;
}

if(sums[0] == 0) {
printf("done\n");
} else {
main(argc/2, args);
}
}

最佳答案

第一个问题是您没有为 sums 分配任何内存,并且 sums[i] 访问了一个垃圾位置。这样做:

 int sums[argc];

其次,对于 execvp 函数参数数组必须具有1. [0] -- 合法的字符串。2.最后一个元素[3]必须为NULL

       args[0] = "some-execution-file-name";
args[1] = argv[count];
args[2] = argv[count + 1];
args[3] = NULL;

否则该函数不知道数组的大小,并且从属设备可能会在尝试读取元素 [0] 时死亡。

关于c - 主/从设备出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52731050/

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