VC 中的指针数组问题!

来源:百度知道 编辑:UC知道 时间:2024/05/30 03:29:55
下面代码编译通过,程序退出是出错!
//这样写有问题吗!我要动态数组
long *m_pl=new long[];
m_pl[0]=0;
m_pl[1]=1;
m_pl[2]=2;

//但我这样写没有问题,但不好根据实际数组大小分配内存!
long *m_pl=new long[4];
m_pl[0]=0;
m_pl[1]=1;
m_pl[2]=2;
以上两种写法的区别是什么,那种好?

在定义数组之前要知道数组的大小,这样定义数组之后,在释放内存的时候才不会出错。如果你一定要申请一个不定大小的数组,就只能在程序执行结束时手动释放内存。
可以试一下delete [输入数组中元素的个数]data;
这种方法。在为数组分配好内存后记录一下总的元素的个数,然后在程序结尾处释放掉。
++++++++++++++++++++++++++++++++++++++++++
在定义数组的时候必须指定它的大小否则在程序结束时释放内存就容易出错。可以定义一个变量,通过给变量赋值的方式申请动态数组所需要的内存。但是在结束的时候不要忘记释放内存

一楼的观点是正确的,如果要动态开辟大小不定的内存,你可以使用下面的方法:

int size; //你需要的大小
long * pLong;
........................

pLong = (long *)malloc(sizeof(long) * size);

pLong[0] = ...
pLong[1] = ...
pLong[size-1] = ...

..............

free(pLong);

第一种写法是错误的
VC不允许定义大小不确定的数组 定义数组 其长度也随之确定
若想使用动态数组 需要用到链表

你不妨使用MFC的CPtrArray类,这个类可以管理不定长的指针数组