1

以下は私のc++プログラムの始まりです。私にとってはごく普通のように見えますが、実行するとセグメンテーション違反が発生します。これはデバッガーが私に与えるものです:

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

しかし、forループプログラムが正常に終了する前に「reutrn1」を入力すると、エラーはこのコード行に接続されません。何が間違っている可能性がありますか?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';
4

2 に答える 2

5

配列の割り当てが失敗し、配列に何かを書き込もうとすると未定義の動作が発生する可能性があります。

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

これらは大規模なアレイです。プロセスごとに割り当てられるスタックのサイズは固定されています。を使用して動的配列を作成しnewました。

于 2012-10-28T11:30:25.747 に答える
3

配列変数をメイン関数の外でグローバル変数として定義することもできます。それが理にかなっているかどうかは、プログラム (長さ) によって異なります。

于 2012-10-28T11:49:30.977 に答える