我试图将字符串放入一个临时数组中,放入动态数组中。但是编译器在遇到它时就会中断。
调用dynaicArray:
string* dynamicArray = NULL;
这是它破裂的地方:
for (int i = 1; i <= (size); i++)
{
dynamicArray[i] = tempArray[i];
}
填充tempArray的地方:
void populateArray(int& size, string*& dynamicArray)
{
char decide;
string tempArray[100]; //Holds the strings until the size is known
bool moreStrings = true;
while (moreStrings == true)
{
cout << "\nEnter your string here:";
cin >> tempArray[size];
cout << "\nDo you want to enter another string? Y/N:";
cin >> decide;
decide = toupper(decide);
size ++;
dynamicArray = new string[size];
if (decide == 'N')
{
for (int i = 1; i <= (size); i++) //moves all of the strings from tempArray to dynamicArray
{
string temp;
temp = tempArray[i];
dynamicArray[i] = temp;
}
moreStrings = false;
}
}
}
PS:我知道矢量更好。不幸的是,他们不是一个选择。
答案 0 :(得分:1)
一些设计理念:
if (decide == 'N')
块中的代码在while之后更好地放置,以使while更小==更具可读性moreStrings
的结果设置decide == 'N'
var;不再需要明确的if
dynamicArray = new string[size];
,这是一个巨大的内存泄漏(你用新副本覆盖新创建的动态数组而不首先回收旧的 - 见dalete [ ])size
- 更安全;来电者不需要记得自己动手for (int i = 1; i <= (size); i++)
:围绕大小的()是多余的++size
和++i
;它的效率更高tmp
从temp数组复制到动态数组,代码也有点结构化,建议你用它来交换两个数组之间的字符串(你不是) - 重命名tmp变量或完全删除它