0

今日、私はmallocと整数ポインタをいじっていました。プログラムは、メモリ位置を整数ポインターに割り当て、メモリ位置を配列のような整数の束で埋め、すべての整数を出力するように設定されています。問題は、実行が終了するたびにクラッシュすることです。そして、mallocが問題を引き起こしていると思われます。

ここにコードがあります

#include<stdio.h>
#include<stdlib.h>
int main(){

    int *name,x;
    char y;
    name=malloc(sizeof(int));
    for(x=0;x<500;x++){
        name[x]=x;
    }
    for(x=0;x<500;x++){
        printf("%d ",name[x]);
    }

    scanf("%c",&y);
    free(name);
    return 0;
}

助けてください。ありがとう!

4

3 に答える 3

8
name = malloc(sizeof(int));

が問題です。そうすれば、配列に 1 つの int のみを格納できます。試す

name = malloc(sizeof(int) * 500);

代わりは。

于 2012-09-18T20:09:06.910 に答える
4

「malloc()」はプログラムをクラッシュさせません。

あなたはあなたのプログラムをクラッシュさせています:)

提案:

  1. 「name=malloc()」が NULL を返すかどうかをチェックします (つまり、エラーをチェックします)。

  2. 1 intにスペースを割り当てないでください("sizeof(int)" はおそらく 4 バイトです)。次に、500 int を書き込んでみてください :)

  3. 「500」のような「マジック ナンバー」をコードに散らかさないでください。代わりに定数を使用してください。

提案された変更:

#include<stdio.h>
#include<stdlib.h>

#define NELMS 500

int main(){

    int *name = NULL,x;
    char y;
    name=malloc(sizeof(int) * NELMS);
    if (!name) {
      perror ("Unable to allocate memory!");
      return 1;
    }
    for(x=0;x<NELMS;x++){
        name[x]=x;
    }
    for(x=0;x<NELMS;x++){
        printf("%d ",name[x]);
    }

    scanf("%c",&y);
    free(name);
    return 0;
}
于 2012-09-18T20:10:38.917 に答える
3

1 つだけを格納するためにメモリを割り当てていますint。必要なものは次のとおりです。

name=malloc(500*sizeof(int));

于 2012-09-18T20:09:44.200 に答える