2015-02-08 4 views
-1

У меня есть код, который компилируется с g ++ без ошибок, но если я запустил en executable и после ввода первого целочисленного значения, я получаю ошибку seg fault. Раньше этот код работал нормально, но теперь я продолжаю получать эти сообщения. Я новичок, и я не знаю, почему это происходит. Мой код:Ошибка сегментации (core dumped), linux, g ++

#include <iostream> 

#include <fstream> 

using namespace std; 

int main(){ 

int x, y, z,h,m,d,i, a[9][9]; 

bool f; 

for(x==0; x<=8; x++){for(y==0; y<=8; y++){ 
cin >> z; a[x][y]=z; 


// y 
}; 
// x 
}; 

do { 

for(x==0; x<=8; x++){for(y==0; y<=8; y++){ 

if(a[x][y] == 0){ 

for(i==1 ; i<=9; i++){h=0; for(m==0; m<=8; m++){ 

if(y>=0 and y<=8){ if(a[x][8-m] != i){h++;};}; 

if(y>=0 and y<=8){ if(a[x][0+m] != i){h++;};}; 

if(x>=0 and x<=8){ if(a[8-m][y] != i){h++;};}; 

if(x>=0 and x<=8){ if(a[0+m][y] != i){h++;};}; 

if(h==16){a[x][y]=i; h=0;}; 
//lines 

}; h=0; 




// i 
    }; 

// if 0 
}; 

for(x==0; x<=8; x++){for(y==0; y<=8; y++){ 
d=d+a[x][y]; 

// y 
}; 
// x 
}; 

//y 
}; 
// x 
}; 



if(d==360){f==1;}; 
} 

while(f==0); 

if (f==1){for(x==0; x<=8; x++){for(y==0; y<=8; y++){ 
cout << a[x][y]; 


// y 
}; 
// x 
}; 
}; 


return 0; 

} 

ответ

0

Вы делаете у == 0, х == 0, когда вы, вероятно, означает, х = 0, у = 0

Это может привести к неисправности сегм и/или неопределенное поведение, потому что х и у еще не инициализирована так, когда вы делаете [х] [у] = то, что вы пытаетесь записать на недопустимый адрес памяти

пример:

for(x==0; x<=8; x++){for(y==0; y<=8; y++){ 
cin >> z; a[x][y]=z; 


// y 
}; 
// x 
}; 

становится

for(x=0; x<=8; x++){ 
    for(y=0; y<=8; y++){ 
     cin >> z; a[x][y]=z;  
    };// y 
};// x 
+0

Кроме того, существует проблема с фигурными фигурными скобками. После строки с '// if 0' OP повторно использует x в другом для цикла, изменяющего значения mid loop – MiltoxBeyond

+0

Да, это приведет к завершению внешнего цикла OP после 1-й итерации – Qwertyzw