动态分配之改变数组大小出现运行时异常Exception:CrtIsvalidheappointer(pUserData)

动态分配之改变数组大小出现运行时错误Exception:_CrtIsvalidheappointer(pUserData)
#include<iostream>
using namespace std;

template <class T>
T *Changesize1D(T a[],int Size,int toSize)
{
int i;
T *b = new T[toSize];
for(i=0; i<Size; i++)
b[i] = a[i];
delete [] a;
return b;
}

void main()
{
int a[5] = {1,2,3,4,5};
int *b;
b = Changesize1D(a,5,10);
cout<<sizeof(b)/4;
}


------解决方案--------------------
C/C++ code

 template <class T>
 T *Changesize1D(T a[],int Size,int toSize)
 {
     int i;
     T *b = new T[toSize];
     for(i=0; i<Size; i++)
         b[i] = a[i];
//     delete [] a;//a是固定的数组,不需要使用delete
     return b;
 }

 void main()
 {
     int a[5] = {1,2,3,4,5};
     int *b;
     b = Changesize1D(a,5,10);
     cout<<sizeof(b)/4;//作为参数传递后的指针已经丢失了原来的长度信息,使用sizeof只能获得一个指针的大小了。
 }

------解决方案--------------------
2楼正解
函数中的入参a改成指针,本来循环赋值的时候也是通过原始size控制的,不需要固定长度的数组。