如何在C ++ 11中增长2d动态分配的字符串数组?

时间:2015-04-03 17:04:48

标签: string pointers c++11 dynamic-memory-allocation nspointerarray

所以,我一直在做这个问题: 问:编写一个程序,让用户可以跟踪他们上次与每个朋友交谈的时间。用户应该能够添加新朋友(尽可能多的朋友!)并存储他们上次与每位朋友交谈的天数。让用户也更新此值。

我创建了指针user_friends的指针,用于存储朋友名字的二维字符串数组。自上次谈话以来的日子。这是一个3x2阵列最初为3个朋友。 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的详细信息时(即当我输入索引为3时)程序崩溃。 growArray函数有问题吗?

此外,显示功能是否正常?

1 个答案:

答案 0 :(得分:0)

growArray函数中,第一个for循环应该从0迭代到2 * cur_size而不是0cur_size

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