当前位置: 技术问答>linux和unix
我的指针怎么了?:(
来源: 互联网 发布时间:2015-06-20
本文导语: 各位高手请帮我看一下: void func(char *point) { point=(char *)malloc(sizeof(char)*50); strcpy(point,"jfdklsajfdlsa"); printf("%sn",point); } void set_empt(char *point) { free(point); point=NULL; } vo...
各位高手请帮我看一下:
void func(char *point)
{
point=(char *)malloc(sizeof(char)*50);
strcpy(point,"jfdklsajfdlsa");
printf("%sn",point);
}
void set_empt(char *point)
{
free(point);
point=NULL;
}
void main()
{
char *point;
func(point);
printf("point=%sn",point);
strcpy(point,"fldsajfjldksafklds");
printf("point=%sn",point);
set_empt(point);
printf("point is %sn",(point==NULL)?"NULL":"not null");
return ;
}
输出是:
jfdklsajfdlsa
point=洹B
point=fldsajfjldksafklds
point is not null
Segmentation fault
我的平台是linux,这到底是怎么回事呢?
void func(char *point)
{
point=(char *)malloc(sizeof(char)*50);
strcpy(point,"jfdklsajfdlsa");
printf("%sn",point);
}
void set_empt(char *point)
{
free(point);
point=NULL;
}
void main()
{
char *point;
func(point);
printf("point=%sn",point);
strcpy(point,"fldsajfjldksafklds");
printf("point=%sn",point);
set_empt(point);
printf("point is %sn",(point==NULL)?"NULL":"not null");
return ;
}
输出是:
jfdklsajfdlsa
point=洹B
point=fldsajfjldksafklds
point is not null
Segmentation fault
我的平台是linux,这到底是怎么回事呢?
|
兄弟把值参和变参搞混了。
想在函数内改变指针值(不是指针所指的内容),需要char**
想在函数内改变指针值(不是指针所指的内容),需要char**
|
#include
void func(char **point)
{
*point=(char *)malloc(sizeof(char)*50);
strcpy(*point,"jfdklsajfdlsa");
printf("%sn",*point);
}
void set_empt(char **point)
{
free(point);
*point=NULL;
}
void main()
{
char *point;
func(&point);
printf("point=%sn",point);
strcpy(point,"fldsajfjldksafklds");
printf("point=%sn",point);
set_empt(&point);
printf("point is %sn",(point==NULL)?"NULL":"not null");
return ;
}
void func(char **point)
{
*point=(char *)malloc(sizeof(char)*50);
strcpy(*point,"jfdklsajfdlsa");
printf("%sn",*point);
}
void set_empt(char **point)
{
free(point);
*point=NULL;
}
void main()
{
char *point;
func(&point);
printf("point=%sn",point);
strcpy(point,"fldsajfjldksafklds");
printf("point=%sn",point);
set_empt(&point);
printf("point is %sn",(point==NULL)?"NULL":"not null");
return ;
}
|
很经典的c语言问题,如果你非得想用形参来给实参分配空间,就得用rexp兄的指向指针的指针,到底也很简单:c语言里,变量的传递都是单向值传递,如果想让形参的值影响实参就得用指针或是引用。建议搂主好好读读谭浩强的c语言那本教程,相信每次读都会有收获!
|
func(point); //这条语句实际上只是把main中point的内容复制了一份给func中的point
解决的办法:
1. 使用楼上提到的指向指针的指针
2.将*point=(char *)malloc(sizeof(char)*50);放到main中(在调用func前)
解决的办法:
1. 使用楼上提到的指向指针的指针
2.将*point=(char *)malloc(sizeof(char)*50);放到main中(在调用func前)
|
char *temp;temp是字符指针,可以存放字符
char **temp;temp是字符指针的指针(数组指针),可以存放字符数组(字符串)
char **temp;temp是字符指针的指针(数组指针),可以存放字符数组(字符串)
|
上面兄弟解答的好, 就是改变指针本身时, 行参用二级指针或指针的引用.
|
void func(char *point)
函数退出后出现内存泄漏,他并不能将分配的内存通过指针传出去。这样做很危险。
改进
void func( char **point)
invoke :
char *point;
func( &point )
函数退出后出现内存泄漏,他并不能将分配的内存通过指针传出去。这样做很危险。
改进
void func( char **point)
invoke :
char *point;
func( &point )
|
楼主应该补习指针概念。
|
void func(char *point)
{
point=(char *)malloc(sizeof(char)*50);
strcpy(point,"jfdklsajfdlsa");
printf("%sn",point);
}
改成
char* func(void)
{
char* point;
point=(char *)malloc(sizeof(char)*50);
strcpy(point,"jfdklsajfdlsa");
printf("%sn",point);
return point;
}
{
point=(char *)malloc(sizeof(char)*50);
strcpy(point,"jfdklsajfdlsa");
printf("%sn",point);
}
改成
char* func(void)
{
char* point;
point=(char *)malloc(sizeof(char)*50);
strcpy(point,"jfdklsajfdlsa");
printf("%sn",point);
return point;
}
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。