#include <stdio.h>
int main(void)
{
int* a;
*a=20;
printf("%i\n",*a);
return 0;
}
上記のコードがあります。実行時にコードを実行すると、常に「filename.exe has stop working」というエラー メッセージが表示されます。なんで?
ポインタが指すメモリを割り当てていません。次のように行うことができます。
int *a = malloc(sizeof(*a));
またはこのように:
int value;
int *a = &value;
で割り当てた場合は、使い終わったときにポインターmalloc
を呼び出す必要があります。free
初期化されていないポインターにアクセスすると、未定義の動作が発生します。あなたのプログラムでは、初期化されていないポインター アクセスの非常に一般的な結果の 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;
動的に割り当てられたメモリは、それを行ったときに明示的に解放 (解放) する必要があることを思い出してください。
あなたが持っているwild pointer
、またはそれを使用してメモリを割り当てるmalloc
int* a = malloc(sizeof(int));
またはスタック変数を使用する
int b = 0;
int *a = &b;
*a=20;
問題はあなたの課題 *a = 20 にあります。
そのようなポインター変数に値を割り当てることはできません。
int b = 20; a = &b;
ありがとう、サントッシュ