В настоящее время я читаю книгу, чтобы освежить память на 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;
}
Куда он падает? – chris
Кстати, 'sizeof (p_array)' is 'sizeof (Friend *)'. Это не имеет никакого отношения к количеству элементов в вашем «массиве». – chris
Кроме того, у вас нет возвращаемого значения для Resize(), но объявите одно из типов Friend. В любом случае, узнайте, как это сделать, а затем быстро улыбнитесь, зная, что вам никогда не придется со всеми контейнерами в стандартной библиотеке в вашем распоряжении. – WhozCraig