动态内存分配问题~~~~急~~~~~

superrg 2002-01-14 11:20:09
某函数的参数声明如下:
void MyFunction(BYTE ** byTest)
{
.....
//求得byTest的大小
.....
}
现在在另一个函数中调用MyFunction,程序如下
{
......
BYTE m_byTest[1000000];
BYTE * byTest = m_byTest;
MyFunction(&byTest);
.......
......
}
这时函数调用正确,但是在调用前必须分配一块足够大的内存空间,如上,是1000000字节,实际上,当MyFunction时,有时只需几千字节就足够了,但有时却需要几兆或以上字节才足够,而具体需要分配多大的内存空间,只有在执行MyFunction时才知道。
请问:
怎样可以在执行MyFunction时动态给byTest分配内存空间呢??
...全文
98 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cccc2002 2002-01-15
  • 打赏
  • 举报
回复
一定要用双重指针的话:

void MyFunction(BYTE ** byTest)
{
BYTE *tempData;
int Length;

Length= ; //自己填
tempData=new BYTE[Length];
byTest=&tempData;

//运用byTest
delete(tempData);
}


BYTE **m_byTest;

MyFunction(m_byTest);


其他的注意事项见楼上,是一样的
cccc2002 2002-01-15
  • 打赏
  • 举报
回复
sorry,有笔误,应该如此:

void MyFunction(BYTE * byTest)
{int Length;
Length=10; //自己填
byTest=new BYTE[Length];
......
........ //你的处理过程
delete byTest;
}




BYTE *m_byTest;

MyFunction(m_byTest);


不过如果只是这样,没有必要给MyFunction来个这样的指针参数,只在MyFunction中用的话将其作为局部变量就好了,如果m_byTest要在除了MyFunction之外的地方使用,而只是在其中得到空间的话,需要如此:
BYTE *MyFunction()
{BYTE * byTest;
int Length;

Length= ; //自己填
byTest=new BYTE[Length];
......
........ //你的处理过程
return(byTest);
}



BYTE *m_byTest;

m_byTest=MyFunction();

............. /*其他调用m_byTest的过程,不过要注意,因为m_byTest的长度信息并没有
返回,切不可乱对其进行写操作(如想进行,则还需要返回其长度信息),最好只是读,不过如果读越界也是乱码一堆,长度信息还是返回为妙,很简单的加一个&型的int参数给MyFunction即可*/

delete m_byTest;
superrg 2002-01-15
  • 打赏
  • 举报
回复
to cccc2002(cccc):
你把我的函数参数类型弄错啦~~~~~~
void MyFunction(BYTE **byTest)
参数类型是双重指针呀~~~~~
再考虑清楚???
cccc2002 2002-01-15
  • 打赏
  • 举报
回复
有何关系?
这样:
void MyFunction(BYTE * byTest)
{int Length;
Length= ; //自己填
byTest=new BYTE[Length]
}

......
BYTE *m_byTest;

MyFunction(m_byTest);
delete m_byTest;
.......
......
mikesee 2002-01-15
  • 打赏
  • 举报
回复
这个办法不好吧?动态分配的空间应该遵循在哪里创建,在哪里删除的原则。上面的办法虽然可行但是不可靠,建议调用用协商大小的办法。先调用得到大小,再在外面分配和删除。
另外删除的时候一定要这样:delete [] byTest;
superrg 2002-01-14
  • 打赏
  • 举报
回复
to fz_zhou(vcfan):
nLen是在MyFunction中才知道的,而m_byTest是在MyFunction外声明的呀~~~~~~~
我不是大明 2002-01-14
  • 打赏
  • 举报
回复
BYTE* m_byTest;
m_byTest = new BYTE[nLEN];
如果你连nLen都不知道的话话,那就没办法了!

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧