初歩的なミス
やっちまった。
#include <iostream> using std::cout; using std::endl; using std::cin; void input(char* c) { cin >> c; } int main () { while (true) { char c; input(&c); cout << c << endl; if ( c == 'e' ) break; } return 0; }
このコード。一見うまくいくけど何度か入力するとエラーになる。
inputのcinがポイント。
void input(char* c) { cin >> c; }
変数cはポインタなのでそれをcinに与えるとポインタを書き換えてしまい、メモリの破壊が起きてる模様。
よって正しくは
void input(char* c) { cin >> *c; }
のように間接参照するか
void input(char& c) { cin >> c; }
参照型で受け取るかにしないといけない。(もちろんその場合呼び出しは「input(c)」となる)
C++使いならこれが致命的な処理だとすぐ分かるんだろうね。まだまだ日が浅い。精進せねば。