双选择排序(带指针)使程序崩溃
Dual Selection sort (with pointers) crashes program
我刚刚重新开始编程,但我仍然无法掌握指针。我正在尝试使用名称为 "attached" 的测试分数降序进行选择排序。当我只对分数使用选择排序时,它工作得很好,但是当我基本上为名称及其各自的考试分数编写相同的代码时,程序崩溃了。这是函数:
void sortScores (double scores[], int num, string names[])
{
int startScan, maxIndex;
double* maxValue;
string* tempName;
for (startScan = 0; startScan < (num - 1); startScan++)
{
maxIndex = startScan;
*maxValue = scores[startScan];
*tempName = names[startScan];
for (int index = (startScan + 1); index < num; index++)
{
if (scores[index] > *maxValue)
{
*maxValue = scores[index];
*tempName = names[index];
maxIndex = index;
}
}
scores[maxIndex] = scores[startScan];
names[maxIndex] = names[startScan];
scores[startScan] = *maxValue;
names[startScan] = *tempName;
}
// for (int i = 0; i < num; i++)
// cout << scores[i] << " " << names[i] << endl;
}
maxValue
和 tempName
不应该是指针。真的,你得到这个工作纯粹是偶然的,因为取消引用单元化指针是构成 "undefined behavior." 试试这个:
void sortScores (double scores[], int num, string names[])
{
int startScan, maxIndex;
double maxValue;
string tempName;
for (startScan = 0; startScan < (num - 1); startScan++)
{
maxIndex = startScan;
maxValue = scores[startScan];
tempName = names[startScan];
for (int index = (startScan + 1); index < num; index++)
{
if (scores[index] > maxValue)
{
maxValue = scores[index];
tempName = names[index];
maxIndex = index;
}
}
scores[maxIndex] = scores[startScan];
names[maxIndex] = names[startScan];
scores[startScan] = maxValue;
names[startScan] = tempName;
}
// for (int i = 0; i < num; i++)
// cout << scores[i] << " " << names[i] << endl;
}
我刚刚重新开始编程,但我仍然无法掌握指针。我正在尝试使用名称为 "attached" 的测试分数降序进行选择排序。当我只对分数使用选择排序时,它工作得很好,但是当我基本上为名称及其各自的考试分数编写相同的代码时,程序崩溃了。这是函数:
void sortScores (double scores[], int num, string names[])
{
int startScan, maxIndex;
double* maxValue;
string* tempName;
for (startScan = 0; startScan < (num - 1); startScan++)
{
maxIndex = startScan;
*maxValue = scores[startScan];
*tempName = names[startScan];
for (int index = (startScan + 1); index < num; index++)
{
if (scores[index] > *maxValue)
{
*maxValue = scores[index];
*tempName = names[index];
maxIndex = index;
}
}
scores[maxIndex] = scores[startScan];
names[maxIndex] = names[startScan];
scores[startScan] = *maxValue;
names[startScan] = *tempName;
}
// for (int i = 0; i < num; i++)
// cout << scores[i] << " " << names[i] << endl;
}
maxValue
和 tempName
不应该是指针。真的,你得到这个工作纯粹是偶然的,因为取消引用单元化指针是构成 "undefined behavior." 试试这个:
void sortScores (double scores[], int num, string names[])
{
int startScan, maxIndex;
double maxValue;
string tempName;
for (startScan = 0; startScan < (num - 1); startScan++)
{
maxIndex = startScan;
maxValue = scores[startScan];
tempName = names[startScan];
for (int index = (startScan + 1); index < num; index++)
{
if (scores[index] > maxValue)
{
maxValue = scores[index];
tempName = names[index];
maxIndex = index;
}
}
scores[maxIndex] = scores[startScan];
names[maxIndex] = names[startScan];
scores[startScan] = maxValue;
names[startScan] = tempName;
}
// for (int i = 0; i < num; i++)
// cout << scores[i] << " " << names[i] << endl;
}