void GetMemeory(char *p)
{p=(char*)malloc(100);
}void main()
{char *str=NULL;GetMemory(str);strcpy(str,"hello world");printf(str);
}

以上这段代码运行会直接崩溃,虽然在函数内部分配了内存空间并把地址赋予指针p,但是函数调用结束时,系统会自动销毁形参指针*p,所以函数调用后并没有返回分配好的内存地址给指针str,str是没有内存空间的,调用strcpy函数往一个空的内存空间写内容,会导致程序崩溃,而且函数内申请的堆空间没有手动释放,容易造成内存泄露。

稍作改进的内存操作代码:

void GetMemeory(char **p)
{*p=(char*)malloc(100);
}void main()
{char *str=NULL;GetMemory(&str);strcpy(str,"hello world");printf(str);
}

在这段代码中,获得内存的是*p指向的变量,即str获得了内存,p会在函数结束后销毁,所以不会改变&str的值,所以不影响使用,但是使用后没有对申请的内存做任何处理,因此可能导致内存泄露。

关于void* GetMemory()的讨论,有如下代码:

char* GetMemeory()
{char p[]="hello world";return p;
}void main()
{char *str=NULL;str=GetMemeory();printf(str);
}

这段代码显示的是不确定的内容,因为在函数调用结束时,p会被销毁,所以在常量区里的"hello world"内容会被销毁,返回p的地址后,显示的是不确定的内容。

GetMemeory(char *p);GetMemeory(char **p);char* GetMemeory()用法!相关推荐

  1. linux wchar t char,linux 下 Linux 下char转换为wchar_t

    LInux下使用mbstowcs函数可以将char转化为wchar_t 函数含义:convert a multibyte string to a wide char string 说明:        ...

  2. char (*p3)[5] = a; 和char (*p4)[5] = a;的区别?

    char (*p3)[5] = &a; 和char (*p4)[5] = a;的区别? 例1: int main()  {  char a[5]={'A','B','C','D'};  cha ...

  3. oracle中的char和j,oracle中char与varchar2的区别

    1. CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串"abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),在数据 ...

  4. const char* p 、char* const p、const (char*) p 理解记忆

    网上查找了很多理解记忆的方式,总结几个对自己理解很有帮助的原则: 1:从右至左理解(应该和c++的语言特性有关) 2:const修饰最近的一个单词,'*'除外.(还有一种理解const在'*'左,修饰 ...

  5. java char 空字符串_java判断char是否为空的方法

    java判断char是否为空的方法 发布时间:2020-06-23 11:47:02 来源:亿速云 阅读:173 作者:Leah 这篇文章将为大家详细讲解有关java判断char是否为空的方法,文章内 ...

  6. c语言 char *b,C语言:char*a,*b; *b*=a是什么意思? 如图所示

    满意答案 scd921168 推荐于 2016.05.25 采纳率:52%    等级:12 已帮助:7261人 *b*=a 等效于 *b = (*b) * a a的值是a的ascii 十进制 字符 ...

  7. “const char *“ 类型的实参与 “char *“ 类型的形参不兼容错误的解决方法

    "const char *" 类型的实参与 "char *" 类型的形参不兼容错误的解决方法 参考文章: (1)"const char *" ...

  8. c语言中char * string,浅析string 与char* char[]之间的转换

    1.首先必须了解,string可以被看成是以字符为元素的一种容器.字符构成序列(字符串).有时候在字符序列中进行遍历,标准的string类提供了STL容器接口.具有一些成员函数比如begin().en ...

  9. mysql里的char怎么添加数据类型_MySQL CHAR 数据类型

    MySQL CHAR 数据类型 简介:在本教程中,您将了解MySQL CHAR数据类型以及如何在数据库表设计中应用它. MySQL CHAR数据类型简介 CHAR数据类型是MySQL中的固定长度的字符 ...

  10. 关于VS2022 C++报错 const char* 类型的实参与char *类型的形参不兼容解决办法

    关于VS2022 C++报错 const char* 类型的实参与char *类型的形参不兼容解决办法 问题来源 错误原因 解决方案 问题来源 在学习写C++代码时候,去练习课本上课后习题时候的问题, ...

最新文章

  1. wchar用wcout输出正常cout是?
  2. javax顶层接口分析
  3. 数据结构之链表、栈和队列 java代码实现
  4. 关于Talend的Patch分支对应Eclipse开发环境的配置总结.
  5. MVC中helper的用法。
  6. IOS15的抽屉效果
  7. .NET版Web后台快速开发框架 Coldairarrow
  8. 快别发语音了! | 今日最佳
  9. P2055-假期的宿舍【网络流,最大流,最大匹配】
  10. web前端复习系列[1]——标签
  11. LeetCode 985. 查询后的偶数和
  12. Linux命令 ls -l s输出内容含义详解
  13. Delphi2010正式版的代码格式化及自动完成
  14. 华为终端云服务赋能“智能座舱”,打造出行场景的“超级终端”
  15. 计算机切换桌面快捷方式,显示桌面快捷键,教您win10怎样快速切换到桌面
  16. 格林威治时间转北京时间
  17. 云服务器的部署形式之一私有云介绍
  18. 如何学习Java并发编程
  19. java xml中的冒号_带冒号的xml元素名称
  20. 基于Django的健身房管理系统

热门文章

  1. 【Android 系统开发】Android框架 与 源码结构
  2. javascript DOM 编程艺术 札记2 平稳退化
  3. Charles抓包https
  4. Matlab图像处理教程
  5. ESPCMS基本导航操作
  6. Leetcode题解(20)
  7. 如何评估自己对外界认知是否正确?
  8. C#WindowsForm之创建窗体
  9. 宝付分析程序员怎么提升自己
  10. 设置更改root密码 连接mysql mysql常用命令