我试图在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]
)
你能帮忙纠正这个问题吗?
答案 0 :(得分:1)
我们没有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;
}