社区
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);
} 想这样在函数体内分配内存怎么不能返回到主函数,我要怎么做?
在线等待... .. .
...全文
63
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写文章
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语言
指针
,详细阐述了内存泄漏、空
指针
解引用、悬空
指针
等15种可能出现的
问题
,给出对应示例代码和修复方法。还提出使用标准库状态码、添加注释、考虑平台差异等改进建议,以确保代码健壮、易维护和调试。
结构体
指针
与非
指针
问题
及解决
博客围绕结构体
指针
与非
指针
展开,通过两段代码实例阐述调用结构体时使用
指针
和非
指针
的情况及
问题
原因。还介绍了访问方式差异,不使用
指针
改用结构体数组的优缺点,最后对
指针
和非
指针
进行了对比总结。
面试
问题
指针
篇
博主分享自己踩过的C语言面试坑,涵盖定义与声明、声明、空
指针
、绕来绕去的
指针
等
问题
。如结构包含指向自身
指针
的定义
问题
、
指针
声明与分配空间
问题
、空
指针
概念,还给出不同
指针
类型的定义示例。
双
指针
问题
本文介绍了双
指针
问题
的基础知识,包括同向双
指针
(快慢
指针
、尺取法)、反向双
指针
、首尾
指针
和分离双
指针
。还通过多个例题,如有序矩阵中第K小的元素、子数组和排序后的区间和等,详细阐述了双
指针
在解题中的应用及注意事项。
有关空
指针
,野
指针
以及相关内存
问题
本文详细介绍了C语言中的空
指针
、野
指针
概念,以及
指针
相关的内存
问题
。空
指针
赋值为NULL,不可直接调用;野
指针
未初始化,可能导致非法内存访问。文章通过多个示例探讨了内存分配与释放不当时可能引发的段错误和内存泄漏
问题
,强调了正确管理内存的重要性。
C语言
70,038
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章