C++ 运行后删除指向已排序字符串数组的指针时出错

C++ 运行后删除指向已排序字符串数组的指针时出错,c++,arrays,sorting,dynamic-memory-allocation,C++,Arrays,Sorting,Dynamic Memory Allocation,我在为我的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++) {

我在为我的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;
}
string*sortname(字符串数组[],整数)
{
对于(int i=0;i数组[j])
smallestIndex=j;
}
交换(数组[i],数组[smallestIndex]);
}
返回数组;
}
int main()
{
库特数;
字符串*数组=新字符串[编号];
for(int i=0;icout
sortname
返回其
数组
参数的副本

因此,
sorted
指向与
array
相同的数组。因此,一旦
array
被删除,
sorted
指向删除的数组。它不再指向有效对象

删除不指向对象的指针具有未定义的行为


一条经验法则:你只需要为每一个新的内容删除一次。你已经调用了一次new。调用delete两次是不止一次的


另一条经验法则:永远不要直接分配内存。你可以使用
std::vector

因为你在双重删除同一个数组。啊,我明白了,谢谢你,现在它非常有意义!我不必对排序的指针做任何事情,因为主数组已经被删除。谢谢你的帮助,只需传递
std即可::vector
并按值返回。这是一种很好的做法,不会出现此问题