数组重新分配内存储器出错

数组重新分配内存出错!

#include <iostream>
using namespace std;

// 重新分配内存
void AllocMem(int* newArr,int new_size)
{
int* tempArr = newArr;
newArr = new int[new_size];
for(int i=0; i<10; i++)
   *(newArr+i) = *(tempArr+i);
delete[] tempArr;
tempArr = NULL;
}

int main()
{
int *Arr = new int[10];
cout<<"old Array =";
for(int i=0; i<10;i++)
{
Arr[i] = i;
cout<<"  "<<Arr[i];
}
cout<<" \n";

AllocMem(Arr,100);
cout<<"new Array =";
for(int i=0; i<100;i++)
{
cout<<"  "<<Arr[i];
if(i%20==0)
cout<<"\n";
}
getchar();
}

AllocMem()函数目的是:在堆中申请更大的空间,将原数组赋给新数组。但程序死活调试不成功,一个汗!另外还有一个问题,如下使用指针,运行没有问题,但不知有其他副作用不?

int arr[10]= {0,1,2,3,4,5,6,7,8,9};
int *ptr = arr;
for(int i=0; i<10;i++)
   cout<<ptr[i]<<" ";

最后一个问题,就是栈中声明的数组,能否赋值给堆中的数组,该过程如何进行,请各路大神不吝赐教!
内存分配,复制数组,指针和数组

------解决方案--------------------
#include <iostream>
using namespace std;

// 重新分配内存
void AllocMem(int** newArr,int new_size)
{
int* tempArr = *newArr;
*newArr = new int[new_size];
for(int i=0; i<10; i++)
*(*newArr+i) = *(tempArr+i);
delete[] tempArr;
tempArr = NULL;
}

int main()
{
int *Arr = new int[10];
cout<<"old Array =";
for(int i=0; i<10;i++)
{
Arr[i] = i;
cout<<"  "<<Arr[i];
}
cout<<" \n";

AllocMem(&Arr,100);
cout<<"new Array =";
for(int i=0; i<100;i++)
{
cout<<"  "<<Arr[i];
if(i%20==0)
cout<<"\n";
}
getchar();
}

------解决方案--------------------
只传指针比如 int*,只是原指针的一份拷贝,在AllocMem函数中不能修改原指针的指向,所以返回后原指针的指向没有改变。你可以搜一下二级指针自己了解一下。
------解决方案--------------------
C++的函数是通过传值进行参数传递的,你传入了newArr的一个拷贝,在AllocMem里面进行重新new,但是AllocMen函数返回时,newArr的拷贝就消失了. 正确的写法是,传入指针的引用

void AllocMem(int*& newArr,int new_size)
{
    delete [] newArr;
    newArr = new int[new_size];
    for(int i=0; i<new_size; i++)
    {
       newArr[i] = i;
    }
}

------解决方案--------------------
1. 不用指针的指针也行,直接返回新指针


int* AllocMem(int* oldArr,int new_size)
{
    int* newArr = new int[new_size];
    for(int i=0; i<10; i++)
       *(newArr+i) = *(oldArr+i);
    delete[] oldArr;
    return newArr;