一维指针作函数参数,与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
原创粉丝点击