初歩的なミス

やっちまった。

#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++使いならこれが致命的な処理だとすぐ分かるんだろうね。まだまだ日が浅い。精進せねば。