为什么指针数组在函数结束时初始化自己?
Why does an array of pointers initializes itself when function finishes?
我周末的作业是编写一个函数,该函数获取一个整数数组和数组的大小,并创建一个指针数组,以便指针将使用冒泡排序(不改变原始数组)。
在调试时,我发现它工作得很好,但是当函数返回到main()时,指针数组被初始化,一切都消失了。
#include <iostream>
using namespace std;
void pointerSort(int arr[], int size, int* pointers[]);
void swap(int a, int b);
void main()
{
int arr[5]={7,2,5,9,4};
int size = 5;
int* pointers[5];
pointerSort(arr, size, pointers);
for (int i = 0; i < 5 ; i++)
cout << *pointers[i] << endl;
}
void pointerSort(int arr[], int size, int* pointers[])
{
int j, i;
bool change = true;
pointers = new int*[size];
for (i = 0; i < size; i++)
pointers[i] = &arr[i];
i = 0;
j = 1;
while (i <= size-1 && change == true)
{
change = false;
for (i = 0; i < size-j; i++)
{
if (*pointers[i] > *pointers[i+1])
{
swap(pointers[i], pointers[i+1]);
change = true;
}
}
j++;
}
}
void swap(int&a, int&b)
{
int temp;
temp = a;
a = b;
b = temp;
}
pointers = new int*[size];
此时,pointers
已经是一个指针数组,不需要分配。
在这行之后,pointers
不再是主函数中的数组。
这就是为什么你的函数失败,因为你正在重新分配pointers
指向的数组。原来的数组不会被重新初始化,它只是在整个代码中被忽略了。
正如ATaylor提到的,这也是一个内存泄漏,因为您不删除分配的空间,并且在函数结束后不能删除空间。
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++使用整数的压缩数组初始化对象
- C++初始化基类
- 多成员Constexpr结构初始化
- 复制列表初始化的隐式转换的等级是多少
- 内联映射初始化的动态atexit析构函数崩溃
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 没有用于初始化C++中的变量模板的匹配构造函数
- 在未初始化映射的情况下,将值插入到映射的映射中
- C++成员初始化
- 为什么在C++中首先初始化成员类
- 同时具有"聚合初始化"和"模板推导"
- 初始化值是否保证通过其自己的地址反映,而不考虑内存顺序
- VAR在其自己的初始化器中使用
- 用作自己的初始值设定项的未初始化变量的行为是什么?
- 如何列出初始化我自己的类
- 在Xcode IDE中初始化我自己的c++类向量
- 初始化我自己类类型的向量
- 为什么指针数组在函数结束时初始化自己?