C++ 运行后删除指向已排序字符串数组的指针时出错
我在为我的alg类练习排序和指针——这是一个简单的程序,要求用户输入希望输入的名称数量,然后要求输入这些名称,然后进行排序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++) {
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;i coutsortname
返回其数组
参数的副本
因此,sorted
指向与array
相同的数组。因此,一旦array
被删除,sorted
指向删除的数组。它不再指向有效对象
删除不指向对象的指针具有未定义的行为
一条经验法则:你只需要为每一个新的内容删除一次。你已经调用了一次new。调用delete两次是不止一次的
另一条经验法则:永远不要直接分配内存。你可以使用std::vector
。因为你在双重删除同一个数组。啊,我明白了,谢谢你,现在它非常有意义!我不必对排序的指针做任何事情,因为主数组已经被删除。谢谢你的帮助,只需传递std即可::vector
并按值返回。这是一种很好的做法,不会出现此问题