1
int client::add_user(item & item_in)
{
    char temp[ASIZE];
    cout << "\n\nEnter the name of your item: ";
    cin.get(temp, 100, '\n');
    cin.ignore(100, '\n');
    get_upper(temp);
    item_in.name = temp;

    cout << "\n\nEnter in effect one: ";
    cin.get(temp, 100, '\n');
    cin.ignore(100, '\n');
    get_upper(temp);
    item_in.effect1 = temp;

    cout << "\n\nEnter in effect two: ";
    cin.get(temp, 100, '\n');
    cin.ignore(100, '\n');
    get_upper(temp);
    item_in.effect2 = temp;

    cout << "\n\nEnter in effect three: ";
    cin.get(temp, 100, '\n');
    cin.ignore(100, '\n');
    get_upper(temp);
    item_in.effect3 = temp;

    cout << "\n\nEnter in effect four: ";
    cin.get(temp, 100, '\n');

    cout << "this";
    cin.ignore(100, '\n');
    cout << "that";

    get_upper(temp);
    item_in.effect4 = temp;

...このコードには多くの間違いがあることを理解しています。私が抱えている問題は、最初の4つのブロックが正常に実行されることですが、g ++を使用してこのコードをコンパイルして実行すると、「this」が表示され、その後にセグメンテーション違反であり、「それ」はありません。何か案は?

4

1 に答える 1

3

別の質問に基づくと、パラメータはいくつかのフィールドitem_inを持つ構造体のようです。配列はこの関数の期間中のみ存在するchar *ため、重大な問題があります。tempのポインタに一時配列のアドレスを割り当てていますitem_in。関数が戻ると、配列はスコープ外になり、そのメモリはあなたのものではなくなります。

ポインタにメモリを割り当ててデータをコピーすることでこれを修正できますが、最善のstd::string解決策はC++標準ライブラリから使用することです。それはあなたが期待するようにリソース管理と割り当て作業のような操作を処理します。

于 2012-05-25T07:42:48.623 に答える