指针问题

zzsxqzzsxq3000 2003-10-14 11:24:47
请看
allocate(char **buf) {
buf = (char**)calloc(20,sizeof(char*));
}

void main()
{
char **buffer = NULL;
int size;
allocate(buffer);
size = _msize(buffer);
free(buffer);
} 想这样在函数体内分配内存怎么不能返回到主函数,我要怎么做?
在线等待... .. .
...全文
27 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mosaic 2003-10-14
  • 打赏
  • 举报
回复
需要将指针的地址传进去,考虑下面得代码是否可以
allocate(char ***buf) {
*buf = (char**)calloc(20,sizeof(char*));
}

void main()
{
char **buffer = NULL;
int size;
allocate(&buffer);
size = _msize(buffer);
free(buffer);
}

不清楚这个代码的用处是什么?
Hot_Forever 2003-10-14
  • 打赏
  • 举报
回复
int allocate(char **buf)
{
//下面分配内存
.....
if(分配成功) return 0;
else return(errno);
}

TianGuangZao 2003-10-14
  • 打赏
  • 举报
回复
图乱了,重贴:
char ***buf :
////////////////////////////// (*buf[i]) ///////////////////
//// buf ///// *buf ////////// **(buf+i) ///////////////////
/// +----+ // +----+ //////// +---------+ //// +--------+ //
/// | .. ====>| .. ==========>| ...... =======>| string1| //
/// +----+ // +----+ //////// +---------+ //// +--------+ //
///////////// buffer //////// | ...... =======>| string2| //
///////////////////////////// +---------+ //// +--------+ //
///////////////////////////// | ...... =======>| string3| //
///////////////////////////// +---------+ //// +--------+ //
///////////////////////////// | ...... =======>| ...... | //
///////////////////////////// + ...... + //// | ...... | //
///////////////////////////// | ...... =======>| ...... | //
///////////////////////////// //////////////////////////////
TianGuangZao 2003-10-14
  • 打赏
  • 举报
回复
char ***buf 感觉很丑陋! 应该用 return。

////////////////////////////// (*buf[i]) ///////////////////
//// buf ///// *buf ////////// **(buf+i) ///////////////////
/// +----+ // +----+ //////// +---------+ //// +--------+ //
/// | ====>| ==========>| =======>| string1| //
/// +----+ // +----+ //////// +---------+ //// +--------+ //
///////////// buffer //////// | =======>| string2| //
///////////////////////////// +---------+ //// +--------+ //
///////////////////////////// | =======>| string3| //
///////////////////////////// +---------+ //// +--------+ //
///////////////////////////// | . =======>| . | //
///////////////////////////// + . + //// | . | //
///////////////////////////// | . =======>| . | //
///////////////////////////// //////////////////////////////

这么多级下来,能把看的人搞晕。

正确写法:

#include <stdio.h>

char ** allocate(char **tt) { // 传递数组的第一个元素地址
int i;
char **buf = (char**) calloc( 20, sizeof( char*) );

for ( i = 0; i < 3; i++)
buf[i] = tt[i]; // 实际为指针运算,相当于 *(buf+i) = *(tt+i);

return buf;
}

int main()
{
char **buffer = NULL;
int i;
char *temp[10] = {"ping", "guo", "shu"};

buffer = allocate( temp); // 分配空间并初始化

for ( i = 0; i < 3; i++)
printf("%s\n", buffer[i]);

free( buffer);

return 0;
}
ogre 2003-10-14
  • 打赏
  • 举报
回复
th_xu(雷鸟) 和 scottZZ(思考特) 的方法是正确的!
zzsxqzzsxq3000 2003-10-14
  • 打赏
  • 举报
回复
请看:
void allocate(char ***buf,char *tt[]) {
int i;
*buf = (char**)calloc(20,sizeof(char*));
for(i=0;i<3;i++)
buf[i] = tt[i];
}

void main()
{
char **buffer = NULL;
int i;
char *temp[10] = {"ping","guo","shu"};
allocate(&buffer,temp);
for(i=0;i<3;i++)
printf("%s\n",buffer[i]);
free(buffer);
} 这样内存的确是分配出来了,也可以传回主函数,可是函数中的赋值却不可以,为什么?
但是把 for(i=0;i<3;i++)
buf[i] = tt[i]; 这一句写到主函数里面是可以正常赋值的,
呜呼,哪位前辈可以救我,郁闷死了... .. .
rigye 2003-10-14
  • 打赏
  • 举报
回复
allocate(char **buf) {
*buf = (char*)calloc(20,sizeof(char*));
}

void main()
{
char *buffer = NULL;
int size;
allocate(buffer);
size = _msize(buffer);
free(buffer);
}
zzsxqzzsxq3000 2003-10-14
  • 打赏
  • 举报
回复
之前关于传地址如***之法也想到了,可是不行,另外就是不想用传值的方法,就是要在函数体直接修改buffer,不知哪位可以指教。
playboyxp 2003-10-14
  • 打赏
  • 举报
回复
char **allocate(char **buf) {
buf = (char**)calloc(20,sizeof(char*));
return buf;//没有返回值函数结束就释放变量了,你的值也就释放了
}

void main()
{
char **buffer = NULL;
int size;
buffer=allocate(buffer);
size = _msize(buffer);
free(buffer);
}
Wolf0403 2003-10-14
  • 打赏
  • 举报
回复
allocate(char ***buf) {
*buf = (char**)calloc(20,sizeof(char*));
}

void main()
{
char **buffer = NULL;
int size;
allocate(&buffer);
size = _msize(buffer);
free(buffer);
}
langzi8818 2003-10-14
  • 打赏
  • 举报
回复
应该是***,这样才是对的
scottZZ 2003-10-14
  • 打赏
  • 举报
回复
allocate(char *&buf) {
buf = (char*)calloc(20,sizeof(char*));
}

void main()
{
char *buffer = NULL;
int size;
allocate(buffer);
size = _msize(buffer);
free(buffer);
}
th_xu 2003-10-14
  • 打赏
  • 举报
回复
allocate(char **buf) {
*buf = (char*)calloc(20,sizeof(char*));
}

void main()
{
char *buffer = NULL;
int size;
allocate(&buffer);
size = _msize(buffer);
free(buffer);
}
liao2001 2003-10-14
  • 打赏
  • 举报
回复
***

69,369

社区成员

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

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