У меня есть две функции, и я пытаюсь передать буфер от одной функции к другой и изменить ее содержимое, но я не могу заставить ее работать. что у меня есть:Передача char * назад и вперед между функциями
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()», в «datum» есть мусор.
Любые идеи, почему это происходит и как это можно исправить?
Благодаря
населенный пункт не использовался buf. – BLUEPIXY
Во-первых, 'sizeof (buf)' - размер указателя, а не размер выделенной памяти. Во-вторых, присвоение 'buf' будет влиять только на локальную копию, вызывая утечку памяти. Если вы планируете исправить это, установив параметр 'void **', чтобы вы могли назначить '* buf', вы не сможете в неявном порядке передать символ' char ** '. – chris
Прежде всего, 'void * buf' должен быть' char ** buf'. Во-вторых, ваша функция не использует 'buf' вообще! – pvgoran