所以在我执行此交换功能之后,我的数组中的所有值都转到-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;
}
答案 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;
}
将数组标记为静态将导致内存滞留。