通过引用数组值进行交换

时间:2015-02-21 06:10:22

标签: c++

所以在我执行此交换功能之后,我的数组中的所有值都转到-858993460。为什么这个数字?我认为这是我声明我的数组的方式,但通过声明它不是A指针?我想弄清楚为什么会这样。这里是代码:

int* arrayCreate()//added mg
{
    int a[] = { 3, 7, 4, 9, 5, 2 };

    return a;
}

void Sort::Insert()
{   
    int t = 0;

    //start clock
    clock_t start = clock();
    d = arrayCreate();  
    size = 6;
    for (int i = 1; i< size; i++)
    {
        t = i;

        while (((t - 1) >= 0) && (d[t] < d[t- 1]))
        {
            //Swap
            Swap(d[t], d[t- 1]);  // right after this call 
                                  //the debugger says values go to - 8e^8
            t--;
        }
    }
}

void Sort::Swap(int& n1, int& n2)
{
    int temp = n1;
    n1 = n2;
    n2 = temp;
}

1 个答案:

答案 0 :(得分:2)

您可能会忽略所有基于堆栈的变量在退出定义范围后被销毁。

因此,只要返回A,它就会指向未定义的内存。

int* arrayCreate()//added mg
{
    int a[] = { 3, 7, 4, 9, 5, 2 };

    return a;
}

可以更改为此

int* arrayCreate()//added mg
{
    static int a[] = { 3, 7, 4, 9, 5, 2 };

    return a;
}

将数组标记为静态将导致内存滞留。