-3
#include <stdio.h>

int main(void)
{
    int* a;
    *a=20;
    printf("%i\n",*a);

    return 0;
}

上記のコードがあります。実行時にコードを実行すると、常に「filename.exe has stop working」というエラー メッセージが表示されます。なんで?

4

4 に答える 4

6

ポインタが指すメモリを割り当てていません。次のように行うことができます。

int *a = malloc(sizeof(*a));

またはこのように:

int value;
int *a = &value;

で割り当てた場合は、使い終わったときにポインターmallocを呼び出す必要があります。free

初期化されていないポインターにアクセスすると、未定義の動作が発生します。あなたのプログラムでは、初期化されていないポインター アクセスの非常に一般的な結果の 1 つであるセグメンテーション フォールトが発生しました。

于 2013-04-02T09:17:11.143 に答える
1

Inint* a; aのデフォルト値はガベージであり、無効なメモリを指しているため、それに割り当てることはできません。そして、このような割り当て*a=20;は、実行時に未定義の動作を引き起こします。(構文に関するコードは正しいので、コンパイルされています) seg-fault が発生する場合もあります。

次のいずれかを行います。

int i;
int *a = &i;  // a points to a valid memory that is i
*a = 20;

または calloc() または malloc() 関数を使用した動的メモリ割り当て。

int *a = malloc(sizeof(int));
*a = 20;

動的に割り当てられたメモリは、それを行ったときに明示的に解放 (解放) する必要があることを思い出してください。

于 2013-04-02T09:17:45.820 に答える
0

あなたが持っているwild pointer、またはそれを使用してメモリを割り当てるmalloc

int* a = malloc(sizeof(int));

またはスタック変数を使用する

int b = 0;
int *a = &b;
*a=20;
于 2013-04-02T09:17:49.177 に答える
0

問題はあなたの課題 *a = 20 にあります。

そのようなポインター変数に値を割り当てることはできません。

int b = 20; a = &b;

ありがとう、サントッシュ

于 2013-04-02T10:01:26.013 に答える