私はalgクラスのソートとポインタを練習していました。入力したい名前の数を入力するようにユーザーに指示する単純なプログラムです。それらの名前を尋ね、それを並べ替えます。ソートされた文字列配列へのポインタを削除すると、実行後にエラーが発生する
string *sortname(string array[], int number)
{
for (int i = 0; i < number - 1; i++)
{
int smallestIndex = i;
for (int j = i + 1; j < number; j++)
{
if (array[smallestIndex] > array[j])
smallestIndex = j;
}
swap(array[i], array[smallestIndex]);
}
return array;
}
int main()
{
cout << "enter the number of names you wish to enter." << endl;
int number;
cin >> number;
string *array = new string[number];
for (int i = 0; i < number; i++)
{
cout << "enter name #" << i+1 << ":";
cin >> array[i];
}
cout << "the names are: " << endl;
for (int i = 0; i < number; i++)
{
cout << array[i] << endl;
}
string *sorted;
sorted = sortname(array, number);
cout << "the sorted names are: " << endl;
for (int i = 0; i < number; i++)
{
cout << sorted[i] << endl;
}
delete[] array;
delete[] sorted;
return 0;
}
私は機能sortname
がvoid
に設定し、何も返さないことを承知していますが、私はちょうど(練習のために)戻って試してみたかったです。 しかし、最後にdelete[] sorted
を追加すると、ソートされた名前がリストされた後にコンソールがクラッシュします。私はちょうどdelete[] array
それがうまくいけば、並べ替えも同様に削除する必要があります...任意のヒント?
同じアレイをダブルで削除しているためです。 –
ああ、ありがとう、今それは完璧な意味があるよ! –
メイン配列が削除されているので、ソートされたポインタで何もする必要はありません。助けてくれてありがとう –