n を仮想メモリ アドレス 5 に設定しています。このメモリはアプリに対して有効ではないため、クラッシュが発生します。
必要なのは、最初に有効なメモリを取得することです。スタックを使用するか、ヒープを使用するかの 2 つのオプションがあります。
以下のようなことをすると、n をスタック変数に「ポイント」し、そこで値 5 を割り当てることができます
int stackVar = 0;
int *n = &stackVar;
*n = 5;
スタックとヒープの違いは、メモリがどこから来るかです。スタック変数は、関数呼び出しの間だけ存続します。関数が返されると、スタック変数が「ポップ」され、それらのメモリは無効になります。-- したがって、上記の例から、「n」は「stackVar」が存在する限り、この場合は関数から戻るポイントまでしか使用できません。
あなたが設定した場合
int *n = (int *)malloc(sizeof(int));
*n = 5;
sizeof(int) バイトの大きさの「ヒープ」変数を作成します。この変数は、「free」を呼び出すまで続きます
free(n);
「new」の呼び出しで追加の簿記メモリが作成されるため、これを行うと多少重いことに注意してください。それは多くはありませんが、そこにあるでしょう。通常、ヒープからより大きなクラス/構造体を割り当てます。ヒープを使用することのもう 1 つの負担は、忘れずに削除する必要があることです。そうしないと、「リーク」してしまいます。以前にこれらを見たことがあると思います:-)アプリを実行する時間が長くなるほど、より多くのメモリが使用されます
これは意味がありますか?:)