尝试克隆函数时出现分段错误(在C中)

陈安德

我正在尝试使conway成为生活的游戏,当我将其单线程运行时,它可以完美运行,但是如果我尝试使用clone()使其运行,则会导致分段错误。如果可能的话,有人可以帮助我找出原因吗?

主要的

int main(int argc, char *argv[])
{
    const int STACK_SIZE=65536;
    int checkInit=0;
    int i;
    int j;
    int *stack;
    int *stackTop;
    FILE *file1;
    int numThreads;

    if(argc != 3) {
        fprintf(stderr, "Usage: %s <Executable> <Input file> <Threads>\n", argv[0]);
        exit(1);
    }

    file1=fopen(argv[1],"r");
    if(file1==NULL) { //check to see if file exists
        fprintf(stderr, "Cannot open %s\n", argv[1]);
        exit(1);
    }

    fscanf(file1,"%d",&N);

    stack=malloc(STACK_SIZE);
    if(stack==NULL) {
        perror("malloc");
        exit(1);
    }
    stackTop=stack+STACK_SIZE;

    numThreads=atoi(argv[2]);
    calcPerThread=N/numThreads;
    eCalcPerThread=calcPerThread;

    B = malloc(N * sizeof(int *));
    A = malloc(N * sizeof(int *));
    for (i = 0; i < N; i++) {
        A[i] = malloc(N * sizeof(int));
        B[i] = malloc(N * sizeof(int));
    }

    system("clear");
    for(i=0; i<N+2; i++)
        printf("-");
    printf("\n");
    for (i=0; i<N; i++) {
        printf("|");
        for(j=0; j<N; j++) {
            if(A[i][j] == 1)
                printf("x");
            else
                printf(" ");
        }
        printf("|\n");
    }
    for(i=0; i<N+2; i++)
        printf("-");
    printf("\n");

    printf("Press [ENTER] for the next generation.\n");

    fclose(file1);

    while(getchar()) {
        system("clear");
        clone(growDie,stackTop,CLONE_VM|CLONE_FILES,NULL);
        display(N);
    }
}

GDB错误

Program received signal SIGSEGV, Segmentation fault.
clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:72
72      ../sysdeps/unix/sysv/linux/i386/clone.S: No such file or directory.
        in ../sysdeps/unix/sysv/linux/i386/clone.S
Current language:  auto
The current source language is "auto; currently asm".

我认为问题出在stackTop,但我不确定。

丢失的

您的指针算法有问题。

stack=malloc(STACK_SIZE);

分配STACK_SIZE字节。但..

int *stack;
stackTop=stack+STACK_SIZE;

stack是一个指向int的指针。因此,指针算术将使每个+1为4字节而不是1字节(假定为32位系统)。

您可以通过多种方式解决此问题:

  • 使stack和stackTop“ char *”而不是“ int *”
  • 以算术方式强制转换堆栈:stackTop =(((unsigned int)stack)+ STACK_SIZE。

我更喜欢第一种选择。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当我在函数中打印第一个值后尝试打印f时出现C分段错误

尝试在C中获取文件扩展名时出现分段错误错误

尝试访问struct中的指针时出现分段错误

尝试从列表中删除节点时出现分段错误?

尝试引用指针时出现分段错误:C

尝试反向打印数组时出现c ++分段错误

即使我尝试在C中创建文件也找不到文件时出现分段错误

尝试引用char *中的第一个元素时,C中出现分段错误

尝试在 C++ 中按字母顺序排列单词时出现分段错误

尝试在C ++中实现固定大小队列时出现分段错误

尝试连接节点时出现分段错误

尝试访问功能时出现分段错误

尝试打印结构时出现分段错误

nasm汇编中的调用函数时出现分段错误

读取指向函数中的变量时出现分段错误

在函数中声明char数组时出现分段错误

取消引用调用函数中的指针时出现分段错误

在我的 strpbrk 函数中返回 nullptr 时出现分段错误

在ruby上调用c函数时出现分段错误

在C ++中使用模板编写函数时出现了分段错误

使用复制构造函数 C++ 时出现分段错误

访问由C中的函数修改的字符串数组时出现分段错误

在VS Code中调试C#Azure函数时出现分段错误

在C ++ 11中调用Lambda从高阶函数返回时出现分段错误

从C ++中的函数返回字符串时出现分段错误

尝试在C中复制4个char结构的2D数组时出现memcpy错误分段错误

使用clock()函数时出现分段错误

函数返回时出现分段错误

调用 strcpy 函数时出现分段错误