动态分配之改变数组大小出现运行时异常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;
}
------解决方案--------------------
#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控制的,不需要固定长度的数组。