ID非公開

2021/3/3 20:50

99回答

mallocなどで確保せずに、値を保存したらどのような不都合がおこりますか? 例えば、 char *str; strcpy(str, "hello");

C言語関連62閲覧

ベストアンサー

0

ThanksImg質問者からのお礼コメント

みなさん、回答ありがとうございました!!

お礼日時:3/10 14:03

その他の回答(8件)

0

strの値は不定値です。 WindowsやLinuxなど現代のOSは、プロセスごとにメモリ空間を持っているので、最悪でもプロセスが死ぬ程度です。たまにソフトが落ちるのは見たことがあるでしょう。 昔のOSはメモリ空間が1つしかなかったので、フリーズしたり画面がぐちゃぐちゃになったり電源を切る以外どうにもならなくなる可能性があります。 特に0番地からベクタテーブルといって、各デバイスからの割り込みなどの処理番地が書かれているのですが、そこが崩壊すると致命的です。

0

C言語では、変数が定義されても、その中にどういう値が入っているか(初期値)は、規定されていません。つまり、そのときのメモリの状態によって、さまざま。 char *str; とすると、アドレスを格納するための変数 str が作成されますが、strの中には、何が入っているかは、分かりません。 そして、 strcpy( str, "hello" ); で、strに入っている値のアドレスに、"hello"を書き込もうとします。 そのアドレスが、触ってはいけないようなアドレスであれば、プログラムが異常終了します。コアダンプとか、セグメンテーションフォルトと呼ばれる事象です。 そのアドレスが、触ってもいいアドレスであれば、何事もなく動いたように見えるかもしれませんが、そのアドレスが、例えばプログラムが置かれているようなアドレスであれば、プログラムを書き換えるようなものなので、プログラムが変な動きをします。 ここで言っているプログラムとは、今動かしている、「strcpy( str, "hello" );」が入っている、自身です。 最近のコンパイラーは、賢いので、コンパイル時にワーニングを出してくれるかもしれません。もしくは、デフォルトでオプションを付けないと、エラー扱い等もあるかも。

1

質問する前に自分でコンパイルしてみましょう,コンパイルできれば実行してみましょう

1人がナイス!しています

0

uninitialized when used here のエラーメッセージが出てコンパイルが停止します。