2012-10-28 45 views
1

下面是我的C++程序的開始。它對我來說看起來很正常,但是當我運行它時,我得到了分段錯誤。這是調試器給我:調試器嚴重檢測到C++分段錯誤

Program received signal SIGSEGV, Segmentation fault. 
0x00000000004008d4 in main() at usu.cpp:12 
12  cin >> n >> k; 

但errer沒有與這行代碼,當我把「reutrn 1」之前的循環程序becouse連接正常結束。什麼可能是錯的?我編譯使用我的程序:G ++ -ggdb3

#include <iostream> 
#include <stdio.h> 
#define MAX_N 1000000 
#define MAX_K 1000000 
#define MAX_IL_KROKOW 500000 

using namespace std; 

int main() 
{ 
    int n, k; 
    cin >> n >> k; 

    char klocki[MAX_N+1]; 
    int Przes_C[MAX_IL_KROKOW];//podaje następne c po c znajdującym się na pozycji i 
    int Ktore_b[MAX_N];//na podstawie indeksu b w klockach zwraca indeks w tablicy Przes_b 
    int Przes_b[MAX_N];//zwraca indeks b w klockach na podstawie występowania b 
    int poprz_c = -1; 
    int ilosc_b = 0; 
    int klocki_len = 0; 
    for(int i=0;i<n;i++) 
    { 
     klocki[i] = getchar(); 
     return 1; 
     if(klocki[i] == 'b') 
     { 
      Przes_b[ilosc_b] = i; 
      Ktore_b[i] = ilosc_b; 
      ilosc_b++; 
     }  
     if(poprz_c != -1 && klocki[i] == 'c') 
      Przes_C[poprz_c] = i; 
     if(klocki[i] == 'c') 
      poprz_c = i; 

     klocki_len++; 
    }  
    klocki[klocki_len] = '\0'; 
+0

BTW如果您使用的是C++,你應該包括代替 Kylo

+2

堆棧溢出:-) – JohnB

回答

5

很可能youur數組分配失敗嘗試寫一些東西到陣列導致不確定的行爲。

char klocki[MAX_N+1]; 
int Przes_C[MAX_IL_KROKOW]; 
int Ktore_b[MAX_N]; 
int Przes_b[MAX_N]; 

這些都是海量數組。每個進程只分配一個固定的堆棧大小。使用new創建動態數組。

+4

的std ::矢量甚至會更好。 – Kylo

+0

爲什麼std :: vector會比動態數組好?它更快還是更簡單? – ghi

+1

@SzymonOlewniczak因爲std :: vector比new有優勢:容器更安全,爲你處理內存管理,當你推到vector等時,size會自動增長。 –

3

您也可以將數組變量定義爲主函數之外的全局變量。取決於你的程序(長度)是否合理。

+1

如果你不需要'main()'之外的東西,最好把它們定義爲'static'。 –

+2

主要是靜態的,我想。這可能是一個好主意。 – JohnB