问一个建立buffer的问题。

huang45 2010-04-15 03:14:46
bool SetupBuffer(uint8 groupID, uint8* DataBufferPtr)
{





return ok;

return not_ok;
}

像这个的函数可以做到建立buffer吗?如何写呢?
函数被调用返回后内存会不会被其它的占用呢,毕竟传入参数只是一个指针。
不太理解,请教高手!谢谢!
...全文
159 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
huang45 2010-04-15
  • 打赏
  • 举报
回复
谢谢大家的热心~~~!!!
AtlasHR 2010-04-15
  • 打赏
  • 举报
回复
正解[Quote=引用 10 楼 zhangweiit 的回复:]
动态建立buffer,一般需要使用二级指针

void setupbuffer(uint8 ** bufferptr)
{
*bufferptr = malloc((TableLength) * sizeof(uint8));
}
要不然,内存分配无效
[/Quote]
LittleJohny 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 huang45 的回复:]

引用 5 楼 pony_maggie 的回复:
引用 3 楼 huang45 的回复:

写错了。这样:
void setupbuffer(uint8 * bufferptr)
{
*bufferptr = malloc((TableLength) * sizeof(uint8));
}

这样只是传递副本.函数返回,指针就无效了. LZ应该这样写:

C/C++ code……
[/Quote]

在函数体内分配完内存,这段内存就应该应该由外面传入的指针来操作。不太明白你说的占用是什么意思?
zhangweiit 2010-04-15
  • 打赏
  • 举报
回复
动态建立buffer,一般需要使用二级指针

void setupbuffer(uint8 ** bufferptr)
{
*bufferptr = malloc((TableLength) * sizeof(uint8));
}
要不然,内存分配无效
k80179279 2010-04-15
  • 打赏
  • 举报
回复
MSDN:
malloc returns a void pointer to the allocated space, or NULL if there is insufficient memory available.

若分配不成功,则返回0值
k80179279 2010-04-15
  • 打赏
  • 举报
回复
MSDN:
malloc returns a void pointer to the allocated space, or NULL if there is insufficient memory available.

若分配不成功,则返回0值
huang45 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pony_maggie 的回复:]
引用 3 楼 huang45 的回复:

写错了。这样:
void setupbuffer(uint8 * bufferptr)
{
*bufferptr = malloc((TableLength) * sizeof(uint8));
}

这样只是传递副本.函数返回,指针就无效了. LZ应该这样写:

C/C++ code
void SetBuffer(int **pBu……
[/Quote]

恩,谢谢!
再问一下,这样分配的话会不会有被别人内存占用的危险呢?例如刚好外部定义了ptr2刚好等于*(pTest+2)?
pur_e 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 huang45 的回复:]
可能我没说请,一楼大侠误解我的意思了。这个函数的作用是建立一个buffer供外部的函数用。
void setupbuffer(uint8 * bufferptr)
{
*bufferptr = malloc((AdcGroupChannelTbl[Group].TableLength) * sizeof(Adc_ValueGroupType));
}

这样不知道可不可以?大体是这个作……
[/Quote]

没误会,这样就是不可以的,可以参考楼上,除非用用二维指针或引用
lucasma.eth 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 huang45 的回复:]

写错了。这样:
void setupbuffer(uint8 * bufferptr)
{
*bufferptr = malloc((TableLength) * sizeof(uint8));
}
[/Quote]
这样只是传递副本.函数返回,指针就无效了. LZ应该这样写:
void SetBuffer(int **pBuffer)
{
*pBuffer = (int *)malloc(100);
}

然后这样调用:
int *pTest = NULL;
int i = 0;
SetBuffer(&pTest);

linyongzuo 2010-04-15
  • 打赏
  • 举报
回复
不能,要么引用指针,要么返回指针~
还有返回值不能有2个的。。
int **p;
void fun(&p);//引用~

huang45 2010-04-15
  • 打赏
  • 举报
回复
写错了。这样:
void setupbuffer(uint8 * bufferptr)
{
*bufferptr = malloc((TableLength) * sizeof(uint8));
}
huang45 2010-04-15
  • 打赏
  • 举报
回复
可能我没说请,一楼大侠误解我的意思了。这个函数的作用是建立一个buffer供外部的函数用。
void setupbuffer(uint8 * bufferptr)
{
*bufferptr = malloc((AdcGroupChannelTbl[Group].TableLength) * sizeof(Adc_ValueGroupType));
}

这样不知道可不可以?大体是这个作用,那个groupid是用于表示建立多个buffer的。
谢谢。
pur_e 2010-04-15
  • 打赏
  • 举报
回复
这个不可以的,你传入的只有一个整形,一个整形指针,看起来可以修改指针,申请内存,但其实这个指针只是你传进来的参数的副本(形参),修改也是无用的

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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