一维指针作函数参数,与malloc需要手动释放
来源:互联网 发布:网络兼职是真是假 编辑:程序博客网 时间:2024/06/08 05:09
#include<stdio.h>#include<stdlib.h>void GetMemory1(char*p, int num){p = (char*)malloc(sizeof(char)*num);}void GetMemory2(char**p, int num){*p = (char*)malloc(sizeof(char)*num);}char* GetMemory3(char*p, int num){p = (char*)malloc(sizeof(char)*num);return p;}char* GetMemory4(void){char p[] = "hello world";return p;}int main(){char* str1 = NULL;char* str2 = NULL;char* str3 = NULL;char* str4 = NULL;
GetMemory1(str1,100);GetMemory2(&str2, 100);str3 = GetMemory3(str3, "hellow");str4 = GetMemory4();//strcpy(str1, "hello");//printf("%s\n", str1); //无法输出,将str1的地址拷贝到p中,p虽然分配完内存空间,//但是在在函数结束时p被释放,str1只有一个空间,所以str1越界/*strcpy(str2, "hello");printf("%s\n", str2);*///可以输出hello,因为传递的是&str2值(将str2的地址拷贝到给p)//函数执行完毕后,p虽然释放但是p指向的对象(str2)已经被分配完内存空间/*strcpy(str3, "hello");printf("%s\n", str3);*///返回的地址,相当于拷贝给str3,所以str3实际已经有100个空间。printf("%s\n", str4);//输出乱码,因为函数执行完毕后,函数GetMemory4()中的数组空间//被释放,所以str4这个指针指向的内容是乱码,vs2015编译器是//烫烫烫,内存是cc cc cc cc cc cc cc cc 四个c对应中文烫//与第三个GetMemory3()对比,因为malloc分配的内存空间再函数//结束后如果不free是不会被释放的。所以可以输出hello。system("pause");}
0 0
- 一维指针作函数参数,与malloc需要手动释放
- 指针作函数参数,引用作函数参数以及内存释放
- 指针与函数_函数指针作参数
- 数组指针作函数参数
- 字符指针作函数参数
- 指针数组作函数参数
- 用指针作函数参数
- 关于指针作函数参数
- C语言提高-第23/24/25讲: 指针的运算/数组名作为函数参数/指针作函数参数(一维数组Vs指针)
- 函数指针作函数参数/用函数指针调用函数
- C++:指针作函数参数的情况
- 指向数组的指针作函数参数
- 函数指针作参数的作用
- 16周用指针作函数参数
- 函数指针作参数的作用
- 指针数组作main函数的参数
- 函数指针作参数&运算符重载
- 结构体指针作函数的参数
- spring mvc controller间跳转 重定向 传参
- iOS开发中 代理,block,KVO 的使用
- James 3.0 邮箱配置
- 确保对象的唯一性——单例模式 (二):负载均衡器的设计与实现
- Android之实现定位
- 一维指针作函数参数,与malloc需要手动释放
- JQuery初识
- Spring的一种拦截器SimpleUrlHandlerMapping
- Programming with ZooKeeper - A basic tutorial
- Sicily 1198. Substring
- 做一个有思想的程序猿
- 正则表达式实现简单的邮箱格式验证
- ubantu下安装zlib的方法
- 离散数学3____一些重要的重言蕴涵式__推理定律