Я работаю над назначением, которое представляет принципы динамического распределения памяти и указателей. В прошлом я сделал простую программу, которая приняла 5 имен и 5 баллов, а затем использовала сортировку, чтобы поместить их в порядке убывания. Теперь мое задание - вернуться к той же самой программе и задать пользователю количество баллов, которые они хотели бы ввести, а затем использовать указатели для динамического выделения необходимого объема памяти. Это мой первый опыт работы с указателями и этими понятиями, поэтому я все еще пытаюсь понять все это.ошибка сегментации с динамическим распределением и массивами/указателями
Я получил код для компиляции, но я получаю ошибку ошибки сегментации, как только я ввести любое целое число для сколько баллов я хотел бы вход (который является первым, что просит программа)
Я уверен, есть несколько ошибок на пути с тем, как я называл и объявлял функции, поэтому, если все, что я просто отчаянно изменяю, сообщите мне, но пока я не понимаю, почему моя программа рушится там, где она рушится. Вот мой код
#include <iostream>
using namespace std;
void initializeData(string *names[], int *scores[], int num);
void displayData(string *names[], int *scores[], int num);
void sortData(string *names[], int *scores[], int num);
int main()
{
int num;
int **intPoint;
string **strPoint;
cout << "How many scores would you like to enter?: ";
cin >> num;
cout << " core dumped? ";
*intPoint = new int[num];
*strPoint = new string[num];
initializeData(strPoint,intPoint,num);
sortData(strPoint,intPoint,num);
displayData(strPoint,intPoint,num);
return 0;
}
void initializeData(string *names[], int *scores[], int num)
{
for(int i=0;i<num;i++)
{
cout << "Please input the name for score: " << i+1 << ": " << endl;
cin >> *(names[i]);
cout << "Please input the score for player: " << i+1 << ": " << endl;
cin >> *(scores[i]);
}
}
void sortData(string *names[], int *scores[], int num)
{
int minIndex,minValue,x;
string stringTemp;
for(int i = 0;i<(num-1);i++)
{
minIndex = i;
minValue = *(scores[i]);
for(x= i+1;x<num;x++)
{
if(*(scores[x]) > minValue)
{
minValue = *(scores[x]);
minIndex = x;
}
}
*(scores[minIndex])=*(scores[i]);
*(scores[i]) = minValue;
stringTemp = *(names[minIndex]);
*(names[minIndex]) = *(names[i]);
*(names[i]) = stringTemp;
}
}
void displayData(string *names[], int *scores[], int num)
{
cout << "Top scorers: " << endl;
for(int i=0;i<num;i++)
{
cout << names[i] <<": ";
cout << scores[i] << endl;
}
}
и мой выходной ток: Сколько баллов вы хотите ввести ?: 10 вина Сегментация (ядро сбрасывали)
который происходит независимо от того, что Int я положил там. Я положил заявление cout после cin < < num; чтобы узнать, получилась ли эта программа далеко, но это никогда не происходит.
Любая помощь очень ценится. Извините, если это самая простая ошибка.
спасибо. Я пытался использовать значение, которое указатель еще не указывал, верно? Я не совсем понимаю двойные указатели, поэтому у меня действительно не было бизнеса, использующего их, но почему-то это то, как я получил компиляцию.Как только я изменил это, я смог вернуться и изменить все свои функции, ожидая массивы в своих параметрах указателям, указывающим на массивы. Правильно ли это звучит? –
Я понимаю, что это поздно, но говоря: «вы устанавливаете значение * intPoint' для указателя на целые числа ... »неточно, так как« intPoint »* - это указатель. Он должен фактически сказать «значение * intPoint' * к * адресу * нового массива целых чисел ...» – ray
@ray Спасибо. Исправлена. –