用new分配内存的问题
我在做通信程序的时候需要一个可变长度的结构体,于是我用如下形式实现
struct Info{
int a;
int b;
int c;
int d;
}
struct s{
int iCnt; //sInfo的长度
Info sInfo[1]; //信息数组
}
动态分配内存的代码
s* p=new char[sizeof(s)+(iCnt-1)*sizeof(Info)];
删除内存的代码
delete[] p;
请问这样删除内存会不会只删掉一个int和一个Info的长度,而造成内存泄漏?
如果我在程序中想重新获取用new分配的内存的大小,请问有什么函数可以实现吗?当然在这里有iCnt指定了长度,我的意思是如果没有iCnt,能不能通过什么库函数获取已经用new分配的内存的大小?
[解决办法]
针对你目前的情况,这样做是没问题的,不会有任何影响。假如Info结构中使用了类对象就不能这样分配和释放了,因为这样不能正确执行对象的构造和析构。
用new分配的内存从理论上说是无法判断大小的,如果要判断大小,可以用系统API(例如LocalAlloc)来分配内存。