分段故障核心转储2d阵列

时间:2017-07-06 19:56:02

标签: c linux segmentation-fault

我试图在linux下使用gcc-4.9编译一个c代码(也试过5.4),所以我遇到了分段错误错误。

Program received signal SIGSEGV, Segmentation fault.
0x080492e6 in dot (p1=0x8d9e6c0 <permy>, p2=0x3d77ca7c) at autrq.h:135
135     j = p2[i];  

这是存在问题的代码部分:

#define N 239
#define K 120

void dot(int p1[N], int p2[N]) {
    int p3[N], i, j; //printf("\n debut dot ");

    for (i = 0; i < N; i++){
        p3[i] = p1[i];
    }

    for (i = 0; i < N; i++) { 
        j = p2[i];  
        if(j>=N){
           printf("Too large\n");
        }
        else{

           p1[i]=p3[j];
        }
    } //printf("\n fin dot ");
}

void GenAut(int permy[N]) {
    int i, j, c, f;
    //printf("\n debut GenAUT ");
    int inf[K], mo[N], mi[N];

    for (i = 0; i < N; i++){
        permy[i] = i;
    }

    j = GenIdex(1, 100);

    for (c = 0; c < j; c++) {
        f = GenIdex(0, pos);
        //printf("\n pos: %d et f %d ",pos,f);
        dot(permy, automorf[f]);
    }
}

automorf是一个数组n x n long(int automorf[n][n]

你能帮忙纠正这个问题吗?

1 个答案:

答案 0 :(得分:1)

试试这个并查看输出  output

我们没有p3[3];并尝试访问make错误或未定义的行为。

#include <stdio.h>
#define N 3

void dot(int p1[N], int p2[N]) {
    int p3[N], i, j; //printf("\n debut dot ");

    for (i = 0; i < N; i++){
        p3[i] = p1[i];
    }

   for (i = 0; i < N; i++) { 
        printf("i:%d p3[i]%d\n", i,p3[i]) ;
   }

    printf("\n") ;


    for (i = 0; i < N; i++) { 

        j = p2[i]; 

        printf("i:%d j:%d p3[%d]:%d\n", i, j, j, p3[j]) ;

        p1[i]=p3[j];

    } 

    //printf("\n fin dot ");
}


int 
main(){

    int x[N]={10,20,30};
    int y[N]={1,2,3};

    dot(x, y);


    printf("\n");
    return 0;   
}