首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从主/从获取分割故障

从主/从获取分割故障
EN

Stack Overflow用户
提问于 2018-10-10 00:34:16
回答 1查看 48关注 0票数 0

有人能向我解释一下为什么我在这段代码上有一个分段错误吗?我一直在努力弄清楚,在各种搜索中都是空的。当我不调用main(argc,argv)运行代码时,它就会运行。从只将argv中的2个数字转换为int,然后返回它们。谢谢。

代码语言:javascript
复制
#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);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-10 00:43:24

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

代码语言:javascript
复制
 int sums[argc];

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

代码语言:javascript
复制
       args[0] = "some-execution-file-name";
       args[1] = argv[count];
       args[2] = argv[count + 1];
       args[3] = NULL;

否则,函数就不知道数组的大小,而从函数可以在读取元素时死掉。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52731050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档