1

それで、私はこの質問をしてきました: Q. ユーザーがそれぞれの友達と最後に話した時間を記録できるプログラムを書いてください。ユーザーは、新しい友達を (好きなだけ) 追加し、各友達と最後に話した日数を保存できる必要があります。ユーザーがこの値も更新できるようにします。

友人の名前と番号の 2D 文字列配列を格納するために、ポインター user_friends へのポインターを作成しました。最後に話してからの日数。最初は 3 人の友達用の 3x2 配列です。2 つの列には、友人の名前と番号が格納されます。日 (両方とも文字列型ポインタ配列)。

私のメインはこれです:

int tsize = 3;
string **user_friends = new string*[tsize];

for ( int i = 0; i < tsize; i++ )
{
    user_friends[i] = new string[2];
}

配列に友達を追加する addFriends 関数を次に示します。

 void addFriends( string **user_f , int tsize )
{
static int next_friend = 0;
int index = 0;
string days;

if ( next_friend >= tsize )
    {
        cout << "\nGrowing array now...";
        user_f = growArray ( user_f, tsize );
    }

cout << "\n\nEnter index : ";
cin >> index;
cin.ignore();

cout << "\nEnter friend's name : ";
getline( cin, user_f[index][0] );

cout << "\nEnter days since last talked with this friend : ";
getline (cin, days);
user_f[index][1] = days;

next_friend++;

}

次に、文字列配列に割り当てられたメモリを拡張するこの growArray 関数があります。

 string **growArray ( string **ptr, int cur_size )
{
string **new_ptr = new string*[ cur_size*2 ];

for ( int i = 0; i < cur_size; ++i )
{
    new_ptr[i] = new string[2];
}

for( int i = 0; i < cur_size; ++i )
{
    new_ptr[i] = ptr[i];
}

for ( int i = 0; i < cur_size; ++i )
{
    for ( int j = 0; j < 2; ++j)
    {
        new_ptr[i][j] = ptr[i][j];
    }
}

for ( int i = 0; i < cur_size; ++i )
{
    delete ptr[i];
}

delete[] ptr;
return new_ptr;
}

次に、この表示関数で配列を出力します。

void displayFriends( string **user_f, int tsize )
{
for ( int i = 0; i < tsize; ++i )
{
    for( int j = 0; j < 2; ++j )
    {
        cout << user_f[i][j] << "\t";
    }
    cout << endl;
}

}

これで、最大 3 人の友人の詳細を入力すると、プログラムは正常に実行されます。友人 4 の詳細を入力し始めると (つまり、 index に 3 と入力すると)、プログラムがクラッシュします。growArray 関数に問題はありますか?

また、表示機能は大丈夫ですか?

4

1 に答える 1