如何获取被调函数NEW的内存有多大

怎么获取被调函数NEW的内存有多大
被调函数的任务是把批量数据返还给调用函数,请问是在调用函数中NEW好了,还是在被调函数中NEW好?但不论是谁NEW   ,另外一个函数都不知道这个NEW的空间是多大?比如让我实现一个GETCHAR(CHAR   *   buf,int   LEN);在那个地方NEW比较好了?有没有好的办法。
谢谢

------解决方案--------------------
如果你是new一个类,那你可以sizeof那个类

这样就可以知道new了多大啦 其他同理

sf

------解决方案--------------------
这个?
/***
*size_t _msize(pblock) - calculate the size of specified block in the heap
*
*Purpose:
* Calculates the size of memory block (in the heap) pointed to by
* pblock.
*
*Entry:
* void *pblock - pointer to a memory block in the heap
*
*Return:
* size of the block
*
*******************************************************************************/

size_t __cdecl _msize_base (void * pblock)
{
size_t retval;


_mlock(_HEAP_LOCK);

if (__sbh_find_block(pblock) != NULL)
{
retval = (size_t)
(((PENTRY)((char *)pblock - sizeof(int)))-> sizeFront - 0x9);
_munlock(_HEAP_LOCK);
}
else
{
_munlock(_HEAP_LOCK);
retval = (size_t)HeapSize(_crtheap, 0, pblock);
}

return retval;
}

------解决方案--------------------
new一般是跟delete是在同一个地方, 或者想对应的地方, 这是一般new是需要注意的地方.
如果需要返回一个new的内存, 我觉得就像楼主那样,
可以在调用者中new, 如果是一个数组, 可再传入一个数组长度.
或者也可以用vector这些容器类, 这样就不用管长度了.

------解决方案--------------------
_msize 可以检测动态分配的内存空间是多少
------解决方案--------------------
对于你的问题,
这个不用担心。

new 获得的空间,
你只要知道这个连续空间的首地址,
那么使用 delete[] 就可以完成空间的释放,不需要指定长度参数 ~

当然,你也可以将参数返回,以备它用:
int main()
{
...
int len;
...
char *ptr=GETCHAR(len); //这里len长度也可以获取
...
delete ptr; //OK
}

CHAR * GETCHAR(int &LEN)
{
LEN = ... //通过计算获得
CHAR *buf = new char[LEN];
...
return buf;
};
------解决方案--------------------
如果 LEN 是可以在 主调函数中确定的,
那么建议在 主调函数中完成 new 的工作,
这样比较符合 谁申请,谁释放的原则 ~