malloc

int* p = (int *) malloc (sizeof(int)*128);

//分配128个(可根据实际需要替换该数值)整型存储单元,并将这128个连续的整型存储单元的首地址存储到指针变量p中.

在Linux中可以有这样:malloc(0),这是因为Linux中malloc有一个下限值16Bytes,注意malloc(-1)是禁止的;但是在某些系统中是不允许malloc(0)的。

if (NULL == (p = (type *)malloc(sizeof (type)))) /*请使用if来判断,这是有必要的*/

函数:函数传参:值传递,单向传递,拷贝传递。

void GetMemory(char *p)

{

p = (char *)malloc(100);

}

void Test(void)

{

char *str = NULL;

GetMemory(str);

//值传递,单向传递,拷贝传递。

strcpy(str, "hello world");

printf(str);

}

str不能获得p所指向的内存空间,形参值的改变不会影响实参值;并且malloc开辟的堆空间最后没有释放。

char *GetMemory(void)

{

char p[] = "hello world";

return p;

//p:数组,栈空间;

//运行char p[] = "hello world"后,会开辟1块内存。完毕后空间和数据都释放。

}

void Test(void)

{

char *str = NULL;

str = GetMemory();

//空间被释放掉了

printf(str);

}

str不能获得p所指向的内存空间,错在子函数返回了一个指向栈空间的指针,该栈空间在函数调用结束之后就被系统回收了,p所指向的栈数组空间内的”hello world”可能已经被系统销毁了

Void GetMemory(char **p, int num)

{

*p = (char *)malloc(num);

}

void test(void)

{

char *str = NULL;

GetMemory(&str, 100);

strcpy(str, "hello");

printf(str);

}

//可以打印出”hello”, 只是malloc开辟的堆空间最后没有释放。

void test(void)

{

char *str = (char *) malloc(100);

strcpy(str, “hello”);

free(str);

if(str != NULL)

{

strcpy(str, “world”);

//不能操作已经被释放的堆空间

printf(str);

}

}

//错在堆空间已经释放掉了却仍在使用指向堆空间的指针。

void fun(char* str1, char* str2)

{

*str1 = *str2;

}

main()

{

char *str1="ABC\n";

char *str2="BCD\n";

fun(str1, str2);//都是只读的,段错误。

printf(str1);

}

错在通过指针修改字符常量区的内容

void f1(char *p)

{

p = (char *)malloc(100);

}

int test()

{

char *str = NULL;

f1(&str);//传参类型不匹配

strcpy(str, "hello world");

printf(str);

}

//传参类型不匹配并且malloc开辟的堆空间最后没有释放

最新文章

  1. 【刷题笔记】火车购票-----java方案
  2. sql Server 使某一列的值等于行号
  3. js 如何判断页面里的某个值改变
  4. 通过示波器分析TypeB卡通讯数据
  5. ng-cli
  6. 如何在 iOS 真机运行 Appium
  7. 自学python Day01
  8. 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能
  9. echarts使用笔记三:柱子对比
  10. c#的一些快捷键
  11. MySQL安装、配置、测试
  12. ClickHouse之Distributed Query Execution
  13. 8-51单片机ESP8266学习-AT指令(单片机采集温湿度数据通过8266发送给C#TCP客户端显示)
  14. Solr 自定义排序[1]
  15. [Python] Python教程
  16. 创建和修改主键 (SQL)
  17. 35、springboot-运行状态监控使用Actuator
  18. 有向图博弈+出度的结合 Codeforces Round #406 (Div. 2) C
  19. HDOJ.1228 A + B (map)
  20. RJ45接口定义

热门文章

  1. thinkphp第二天
  2. codeforces 463E . Caisa and Tree
  3. VC生成lib的_stdcall函数名与mingw生成的不一致
  4. Linux中查看进程及杀死进程命令
  5. Courses(最大匹配)
  6. Card Game Cheater(贪心+二分匹配)
  7. 从数据库中,绑定JQuery Accordion控件---Repeater control
  8. c++ 虚析构函数[避免内存泄漏]
  9. [Swust OJ 1132]-Coin-collecting by robot
  10. 创建出多个app