首页新闻找找看学习计划

char **p的用法

0
悬赏园豆:10 [已解决问题] 解决于 2018-04-28 15:44
 1 void t(char **p2){
 2     char *p1 ;
 3     p1 = (char *)malloc(1);
 4     *p2 = p1;
 5 }
 6 int main(){
 7     char **p  ; 
 8 
 9     t(p);
10     return 0;
11 }

结果是中断,为什么?

头文件1991的主页 头文件1991 | 初学一级 | 园豆:178
提问于:2018-04-28 15:31
< >
分享
最佳答案
0

指针需要初始化。你的p没有初始化。

收获园豆:10
Shendu.CC | 小虾三级 |园豆:1914 | 2018-04-28 15:41

初始化 p = NULL;还是会中断,问题应该出现*p2 = p1;这里

头文件1991 | 园豆:178 (初学一级) | 2018-04-28 15:42

@吾谨受教!: p = NULL 就不是初始化啦!!你没有初始化指针,他的值就是NULL,你赋值NULL是没用的。

char **p;

p = new char[100];

Shendu.CC | 园豆:1914 (小虾三级) | 2018-04-28 15:43

@Shendu.cc: 对,你说的对!

头文件1991 | 园豆:178 (初学一级) | 2018-04-28 15:44

@Shendu.cc: 应该是没有给p分配内存空间,是这样吧

头文件1991 | 园豆:178 (初学一级) | 2018-04-28 15:46

@吾谨受教!: 是的,初始化就是分配内存空间。

Shendu.CC | 园豆:1914 (小虾三级) | 2018-04-28 15:51
其他回答(4)
0

1.解决报错的改正是 char **p=NULL; 另*p2 = p1; 改为p2 = &p1 即可.
中断原因是 p2=p=NULL; 则p2指向空,无法存储p1;

2.从你写程序的目的来看是指针p进入函数的目的是获取申请的动态空间
所以感觉最好的改正方式是char *p = NULL; t(&p);

zzblydia | 园豆:203 (菜鸟二级) | 2018-05-16 14:34
0

int main(){ 

char *p ; 

t(&p); 

return 0; 

}

m4sterx | 园豆:206 (菜鸟二级) | 2018-06-20 16:22
0

指针最好初始化 但语言规范里没有确定的要求

訫晴 | 园豆:202 (菜鸟二级) | 2018-07-31 12:17
0

你传递给函数t的并不是一个指针, 而是一个随机整型值, 传递指针必须用取地址符号 &

boveyyun | 园豆:217 (菜鸟二级) | 2018-09-06 18:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册