gpt4 book ai didi

c++ - 动态分配和数组/指针的段错误

转载 作者:行者123 更新时间:2023-11-28 03:08:42 25 4
gpt4 key购买 nike

我正在做一项介绍内存和指针动态分配原理的作业。我以前做过一个简单的程序,接受 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 语句辛 << 数;看看这个程序是否走到了那一步,但它从来没有。

非常感谢任何帮助。抱歉,如果这是最基本的错误。

最佳答案

int **intPoint;

此时在您的代码中,intPoint 未指向任何内容,因为您尚未为其分配值。

*intPoint = new int[num];

然后你取消引用它,但它没有指向任何东西。

尝试:

int *intPoint;

intPoint = new int[num];

现在您正在设置 intPoint,使其指向您分配的整数。

关于c++ - 动态分配和数组/指针的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19045141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com