首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-05-29 
动态分配之改变数组大小出现运行时错误Exception:_CrtIsvalidheappointer(pUserData)#includeiostreamus

动态分配之改变数组大小出现运行时错误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控制的,不需要固定长度的数组。

热点排行