为什么指针数组在函数结束时初始化自己?

Why does an array of pointers initializes itself when function finishes?

本文关键字:初始化 自己 结束 函数 指针 数组 为什么      更新时间:2023-10-16

我周末的作业是编写一个函数,该函数获取一个整数数组和数组的大小,并创建一个指针数组,以便指针将使用冒泡排序(不改变原始数组)。

在调试时,我发现它工作得很好,但是当函数返回到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提到的,这也是一个内存泄漏,因为您不删除分配的空间,并且在函数结束后不能删除空间。