打印

二维指针问题

[复制链接]
900|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dfsa|  楼主 | 2013-10-30 16:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教大家一个通过传递二维指针,在函数内部开辟空间,函数外部使用该内存并释放的问题。
下面是一个在函数内部开辟空间,函数外部操作内存的例子:
void GetMemory( char **p, int num )
{
    *p = (char *) malloc( num );
}
void Test( void )
{
    cout<<"in fun Test:"<<endl;
    char *str = NULL;
    //char **str2=NULL;
    GetMemory( &str, 100 );
    //GetMemory((str2,100));
    strcpy( str, "hello\n" );
    printf( str );
}
函数可以正确执行,那么如果在调用的时候使用下面的方式:
void Test( void )
{
    cout<<"in fun Test:"<<endl;
    char **str2=NULL;
    GetMemory((str2,100));
    strcpy( str, "hello\n" );
    printf( str );
}
通过上述的方式,却不能达到相同的目的。
我感觉传递一个二维指针和一个一维指针的地址(二维指针)应该是一样的,再加上我在调用之前都是为指针置空,所以感觉效果应该一样。
希望大家给一点建议,谢谢!

相关帖子

沙发
sinadz| | 2013-10-30 16:46 | 只看该作者
第一个例子你定义的是 char * str = NULL, str指针的指向地址为NULL而已!
但是它本身的地址是有效的!也就是会所 &str这个值是有效的!

第二个例子你定义的是 char ** str = NULL , 指针的指针为NULL, 也就是指针本身的地址也是为NULL的,所以当你传参数的时候传指针的地址为NULL的了,这个时候你在它基础上给它指向的地址分配空间是不行的,得先给它本身分配空间后,再给它指向分配空间!

使用特权

评论回复
板凳
秋天落叶| | 2013-10-30 16:54 | 只看该作者
第一种char* str = NULL; //&str传参时是有地址空间的,形如0x0012ff7c
第二种char** str = NULL; //str传参时地址是0x00000000

你可以在编译器中watch窗口看一下两种传参的地址!
传参传0x00000000会有什么后果可想而知!

使用特权

评论回复
地板
pkat| | 2013-10-30 17:05 | 只看该作者
第一个char* str = NULL; 你已经给这个str赋值了 也就是说需要有一个内存来保存了NULL这个值,保存这个值的内存地址的值就是&str 也就是**str 你把这个2级指针传进去了 *p的时候他的内容就是NULL 然后你给他重新赋值了
第二个char **str =NULL; 你传到函数里 运行时 *p的时候就会报错 意思是取NULL这个地址的值 取不到

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

282

主题

2404

帖子

2

粉丝