0

次のコード ブロックでセグメンテーション エラーが発生しています。助けてください。

 #include<stdio.h>
    int main(){
        int testcase,num;
        int i,j,*array;
        scanf("%d",&testcase);
        for(i=0;i<testcase;i++){
            scanf("%d",&num);
            for(j=0;j<num;j++){
                scanf("%d",(array+j));
            }
        }
        i=0;
        for(i=0;*(array+i)!='\0';i++){
            printf("%d",1);
        }
        }
4

1 に答える 1

5

編集 2

これを上に置きたかった。

あなたのコードがちょっと変わっていることに気づきました。数値を読み取っているときは、 をループしますが、内部でi別のループをj実行します。反復ごとに、既に読み取った値を上書きするだけです。これは奇妙で、元の意図が何であったかわかりません。したがって、segmentation fault割り当てられていない配列が原因でまだ発生していますが、ここに書いた解決策は正しいものではありません (そして、あなたが何をしようとしているのかを理解するまで、何が正しい解決策になるかわかりません)

Edit2の終わり

array初期化されていません。

これはメモリ内の場所を指すポインターですが、その場所は空いていません。そのため、そこに書き込むと、重要なものを上書きしてしまい、セグメンテーション フォールトが発生します。

あなたのケースでそれを解決する最良の方法は、追加することです

array=malloc(sizeof(int)*testcase);

あなたが読んだ行の直後testcase、だから直後

scanf("%d",&testcase);

また、それを行う場合は、free使い終わったらその記憶に留めておくことをお勧めします。したがって、あなたの場合は追加します

free(array);

配列全体の印刷が完了した直後

編集別のバグがあることに気付きました-配列を印刷しているループで:

for(i=0;*(array+i)!='\0';i++){

array文字列のように、int の配列である を扱っているため、これは悪いことです。「通常の」配列は で終わりません'\0'。また、●'\0'は でありchar*(array+i)ですint

その行を次のように置き換えます

for (i=0;i<testcase;i++){
于 2013-11-01T11:00:38.160 に答える