【发布时间】:2013-03-25 18:02:24
【问题描述】:
我目前正在阅读一本书以刷新我对 C++ 的记忆。我正在讨论的章节与动态内存分配有关。我在做一个练习题,但在弄清楚我的程序出了什么问题时遇到了一些麻烦。问题是
“编写一个程序,让用户记录他们最后一次与每个朋友交谈的时间。用户应该能够添加新朋友(任意数量!)并存储他们最后的天数与每个朋友交谈。让用户更新此值(但不要让他们像负值一样输入虚假数字)。可以显示按朋友姓名排序的列表,按他们交谈后的最近时间每个朋友。”
现在我只是想让程序正确存储用户的输入。
它在我输入 5 个朋友后崩溃,所以我猜测它是在数组上写入的,但 Resize 函数应该会处理这个问题。
他是我的密码
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
struct Friend
{
string friends;
int days;
};
Friend Resize(Friend* p_array, int* size_of_array);
int main()
{
struct Friend f;
int quit = 1;
int array_size = 5;
int number_of_friends = 0;
Friend *p_array = new Friend [array_size];
while(quit != 0)
{
cout << "Enter a friends name.\n";
cin >> f.friends;
cout << "Enter the number of days sence you last saw them.\n";
cin >> f.days;
cout << "Enter '0' to quit the program.\n";
cin >> quit;
if(array_size == number_of_friends)
{
Resize(p_array, &array_size);
}
p_array[number_of_friends] = f;
number_of_friends++;
}
//print the array
cout << endl;
for(int i = 0; i < sizeof(p_array); i++)
{
cout << p_array[i].friends << " " << p_array[i].days << endl;
}
//delete the array
delete [] p_array;
return 0;
}
Friend Resize(Friend* p_array, int* size_of_array)
{
*size_of_array *= 2;
Friend *p_new_array = new Friend [*size_of_array];
for(int i = 0; i < *size_of_array; i++)
{
p_new_array[i] = p_array[i];
}
delete [] p_array;
p_array = p_new_array;
}
【问题讨论】:
-
顺便说一下,
sizeof(p_array)是sizeof(Friend *)。它与“数组”中的元素数量无关。 -
此外,您没有 Resize() 的返回值,但声明了 Friend 类型之一。无论如何,学习如何做到这一点,然后立即微笑,因为您知道您永远不必使用标准库中的所有容器供您使用。
-
@WhozCraig 这与 stl 容器或容器完全无关。它是关于语言语义的,人们肯定必须知道这些。
-
@Paranaix 这就是我说“学习如何做到这一点”的原因,还是不为人知?
-
@WhozCraig 对不起,我好像理解错了。不应该是冒犯。
标签: c++ arrays pointers structure