【发布时间】:2013-12-14 05:17:20
【问题描述】:
我有两个函数,我试图将缓冲区从一个函数传递给另一个函数并让它修改内容,但我似乎无法让它工作..这是我所拥有的:
void caller ()
{
char * datum;
populate (&datum);
}
void populate (void * buf)
{
unsigned char * datump;
int dtsz;
getData (datump,dtsz); // This function puts "001" in datump and dtsz = 4
buf = new unsigned char[dtsz];
memset(datumbuf,0,sizeof(buf));
memcpy (buf,datump,dtsz);
}
当我调试时,一切似乎都与它应该的完全一样,直到我到达 memcpy。看起来 memcpy 实际上并没有做任何事情。 之所以做“datumbuf = new unsigned char[dtsz]”是因为“getData()”函数每次根据数据大小返回不同的大小,因此不能静态分配大小。
当我回到主“caller()”函数时,“数据”包含垃圾。
任何想法为什么会发生这种情况以及如何解决?
谢谢
【问题讨论】:
-
填充不使用 buf。
-
首先,
sizeof(buf)是指针的大小,而不是分配内存的大小。其次,分配给buf只会影响本地副本,造成内存泄漏。如果您打算通过将参数设置为void**来解决此问题,以便您可以分配给*buf,您将无法隐式传递char**。 -
首先,
void * buf应该是char **buf。其次,你的函数根本没有使用buf! -
@chris, char** 完全可以转换为 void*。
-
@pvgoran,我的错,这只是
void**。我将编辑我的评论,将其放在第三点。