社区
C语言
帖子详情
指针问题
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);
} 想这样在函数体内分配内存怎么不能返回到主函数,我要怎么做?
在线等待... .. .
...全文
32
14
打赏
收藏
指针问题
请看 allocate(char **buf) { buf = (char**)calloc(20,sizeof(char*)); } void main() { char **buffer = NULL; int size; allocate(buffer); size = _msize(buffer); free(buffer); } 想这样在函数体内分配内存怎么不能返回到主函数,我要怎么做? 在线等待... .. .
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
***
C/C++
指针
经典资料大全
- C++11引入了智能
指针
(如`unique_ptr`,`shared_ptr`,`weak_ptr`),自动管理内存,避免手动释放带来的
问题
。 8. **
指针
与STL** - 标准模板库(STL)中的容器如`vector`,`list`,`map`等,经常与
指针
结合使用...
C/C++
指针
的13份资料
13. **
指针
的安全性**:在使用
指针
时,要避免未初始化的
指针
、空
指针
解引用、越界访问以及悬挂
指针
等
问题
,确保程序的健壮性。 通过深入学习这13份资料,你将能够掌握C/C++
指针
的精髓,无论是进行底层编程、优化...
免费下载:C语言难点分析整理.doc
在使用C语言进行编程时,
指针
和内存泄漏是开发者经常遇到且需要解决的
问题
。这些
问题
不仅耗费了大量的调试时间,还可能成为软件开发过程中的绊脚石。 #### 导致内存破坏的
指针
操作类型 - **非法
指针
访问**:尝试...
Linux中有空
指针
问题
吗?Linux有什么较好的空
指针
检测机制吗
Linux系统中也会出现空
指针
问题
。1. 内核开发:在Linux内核代码中,如果一个
指针
没有被正确初始化就使用,或者在释放内存后没有将
指针
设置为`NULL`,就可能导致空
指针
解引用,这可能引起内核崩溃(panic)或未定义...
[C / C++] 关于
指针
置空和野
指针
问题
的思考.
最近在复习数据结构,在复习到树和二叉树时,被
指针
置空和野
指针
问题
给搞晕了。 看这一段前序创建二叉树的代码 void PreCreate(BiNode * b){ ElementType e; printf("请输入结点的id(如果输入-1,那么就不在这个...
C语言
70,026
社区成员
243,262
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章