| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1581 人关注过本帖
标题:[求助]一个指针释放的问题
只看楼主 加入收藏
lizhijie
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2007-4-28
收藏
 问题点数:0 回复次数:17 
[求助]一个指针释放的问题


#include<stdio.h>
#include<stdlib.h>
void main()
{
char **p;
int num;
int i;
printf("input you number:");
scanf("%d",&num);

p=(char **)malloc(num);
for(i=0;i<num;i++)
{
if(!(p[i]=(char*)malloc(20)))
{
printf("ERROR");
exit(0);
}
scanf("%s",p[i]);
}
for(i=0;i<num;i++)
{
printf("%s\n",p[i]);
}

//一般来说使用完指针之后要释放该指针指向的内容,比如这里我认为应该加上free(p)但是能通过编译,却执行不了。
//我用的是VC 6.0,请指点!

}

搜索更多相关主题的帖子: 指针 释放 
2007-05-02 13:37
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
p=(char **)malloc(num);
这个是怎么分配的.
(!(p[i]=(char*)malloc(20)))

倚天照海花无数,流水高山心自知。
2007-05-02 19:27
lizhijie
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2007-4-28
收藏
得分:0 
回二楼:

if(!(p[i]=(char*)malloc(20)))
{
printf("ERROR");
exit(0);
}
是给字符串指针分配内存,若分配失败,就执行{ printf("ERROR"); exit(0);}。

char **p也是指针,所以我想给p分配内存也要做强制类型转换,所以p=(char **)malloc(num);不知道我的想法对不对,还请指教。

2007-05-02 22:16
编程怪兽
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-4-28
收藏
得分:0 

**p是指向指针的指针
我不知道你的p是指向那个指针的?


2007-05-06 20:14
wysaijun
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2007-4-25
收藏
得分:0 
将free(p)改成free(*P);
2007-05-07 11:50
wysaijun
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2007-4-25
收藏
得分:0 
将free(p)改成free(*p);
2007-05-07 11:51
zy1437zy
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-4-25
收藏
得分:0 

楼上的你的答案在语法上对!~
!~

[此贴子已经被作者于2007-5-7 13:51:51编辑过]

2007-05-07 12:26
zy1437zy
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-4-25
收藏
得分:0 


我认为:
这个程序是相当厉害的,
不知道楼主写的时候想到了没有。
以下是我的理解:
#include<stdio.h>
#include<stdlib.h>
void main()
{
char **p;/*此处定义一个指针变量它存放的是一个指针变量的指针*/
int num;
int i;
printf("input you number:");
scanf("%d",&num);

p=(char **)malloc(num);/*此处开辟一个空间用来定义或开辟以下p[i]的空间*/
/*在这等效于指定了一个指针数组*/
/*,但是我觉的应该把 num 改为 2*num 因为指针的宽度是16位的,你开辟的是 char 型;*/
for(i=0;i<num;i++)
{
if(!(p[i]=(char*)malloc(20)))
{
printf("ERROR");
exit(0);
}
scanf("%s",p[i]);
}
for(i=0;i<num;i++)
{
printf("%s\n",p[i]);
}
for(i=0;i<=2;i++)
free(p[i]);/*在此处添加了free()函数;但是if(!(p[i]=(char*)malloc(20))) 这个语句已经把一个字符变量*/
/*的地址附给了变量类型为cahr **的p了,如此当free(p)函数调用时是把malloc(20)开辟的空间给了free()的形*/
/*参但是这个地址是char *型的,所以p里面存放的是非指针,我猜想该函数free()把这个非指针数据算做NULL*/
/*了,固在调用free()函数时返回 null pointer assignment。*/
}


请多指教!~

[此贴子已经被作者于2007-5-7 14:03:22编辑过]

2007-05-07 12:54
peswe
Rank: 1
等 级:新手上路
帖 子:197
专家分:0
注 册:2006-11-22
收藏
得分:0 

。。。。。。。

[此贴子已经被作者于2007-5-7 14:48:18编辑过]


C斗士~~~fighting!!!!
2007-05-07 14:34
peswe
Rank: 1
等 级:新手上路
帖 子:197
专家分:0
注 册:2006-11-22
收藏
得分:0 
8楼的厉害了!~

C斗士~~~fighting!!!!
2007-05-07 14:41
快速回复:[求助]一个指针释放的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015428 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved