当前位置:  技术问答>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,这到底是怎么回事呢?

|
兄弟把值参和变参搞混了。
想在函数内改变指针值(不是指针所指的内容),需要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 ;
}

|
很经典的c语言问题,如果你非得想用形参来给实参分配空间,就得用rexp兄的指向指针的指针,到底也很简单:c语言里,变量的传递都是单向值传递,如果想让形参的值影响实参就得用指针或是引用。建议搂主好好读读谭浩强的c语言那本教程,相信每次读都会有收获!

|
func(point); //这条语句实际上只是把main中point的内容复制了一份给func中的point

解决的办法:
1. 使用楼上提到的指向指针的指针

2.将*point=(char *)malloc(sizeof(char)*50);放到main中(在调用func前)

|
char *temp;temp是字符指针,可以存放字符
char **temp;temp是字符指针的指针(数组指针),可以存放字符数组(字符串)

|
上面兄弟解答的好, 就是改变指针本身时, 行参用二级指针或指针的引用.

|
void func(char *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;
}

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • jquery iis7站长之家
  • gcc编译CORBA程序如何关闭智能指针转换为普通指针的警告
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 指向类成员函数的指针其实并非指针
  • 谁说java没指针,我觉得全是指针才对
  • 深入解析C++中的指针数组与指向指针的指针
  • 一个用指针传递内存的问题(如果传进去的是三重指针确不行)
  • busybox中的gzip运行过程中出现page fault错误,并指出出错的指针,但是怎么使用gdb调试,找到指针对应的语句?
  • 关于free指针的指针分量
  • C语言中常量指针与指针常量区别浅析
  • C语言中有指针,因此C语言可以创建链表,那么Java语言没有指针,那Java是否可以创建链表呢?
  • C++中指向对象的常指针与指向常对象的指针详解
  • 关于指针变量,struct 变量,指针使用的一些疑惑,望高手指教
  • 深入理解数组指针与指针数组的区别
  • 深入解析函数指针与返回函数的指针
  • 指向变量的常指针与指向常变量的指针详细解析
  • 结构指针类型强制转换
  • 请问return语句会执行哪些操作?在函数中return一个已分配内存的指针,该指针所占用的内存会释放吗?
  • 请问如何在linux (redhat)下传递一维数组指针?
  • C:函数指针
  • 利用函数指针的好处是什么?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3