博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言 二级指针内存模型②
阅读量:6463 次
发布时间:2019-06-23

本文共 2546 字,大约阅读时间需要 8 分钟。

//二级指针第二种内存模型#define _CRT_SECURE_NO_WARNINGS#include
#include
#include
//打印数组int printfArr(char **pin,int *num){ int ERRO_MSG = 0; if (pin==NULL) { ERRO_MSG = 1; printf("pin==NULL erro msg:%d\n", ERRO_MSG); return ERRO_MSG; } if (num == NULL) { ERRO_MSG = 2; printf("num == NULL erro msg:%d\n", ERRO_MSG); return ERRO_MSG; } int i = 0; for (i = 0; i < *num; i++) { printf("%s\n", pin[i]); } return ERRO_MSG;}//释放内存int freeMalloc(char **pin, int *num){ int ERRO_MSG = 0, i = 0; if (pin == NULL) { ERRO_MSG = 1; printf("pin==NULL erro msg:%d\n", ERRO_MSG); return ERRO_MSG; } if (num == NULL) { ERRO_MSG = 2; printf("num == NULL erro msg:%d\n", ERRO_MSG); return ERRO_MSG; } for (i = 1; i < *num; i++) { if (pin[i]!=NULL) { free(pin[i]); pin[i] = NULL;//防止产生野指针 } } //在这里释放pArray的内存也是可以的,pin是pArray的一个副本,但是pin和pArray都指向同一块内存 //free()是释放指针所指向的内存空间, //这还是有个缺点,给pin==NULL对pArray没有影响,还是可能产生野指针, //所以最好不要在被调用函数里释放 /*if (pin != NULL) { free(pin); }*/ return ERRO_MSG;}void main(){ int num = 5; char ** pArray = (char **)malloc(num*sizeof(char *)); memset(pArray, 0, num*sizeof(char *)); //注释:malloc()函数是在堆上分配一块内存空间,返回这个内存空间的地址 //100*sizeof( char *)是指分配了 100个 char *类型大小的内存空间 //(char **)是将malloc()返回的内存空间地址 转化为一个char **类型的指针 //char ** pArray 说明pArray指向的是一个char * 类型的数据,说明pArray的步长是 sizeof(char *) = 4 //注意:这里计算机并不知道malloc()函数分配的内存从哪里结束,只知道分配的内存从哪里开始 //所以 在进行 pArray+1 加法操作的时候一定要注意malloc()分配内存的大小,不要越界 *(pArray + 0) = (char *)malloc(sizeof(char)*12); //等价于 pArray[0] = (char *)malloc(sizeof(char)* 12); pArray[1] = (char *)malloc(sizeof(char)* 20); pArray[2] = (char *)malloc(sizeof(char)* 20); pArray[3] = (char *)malloc(sizeof(char)* 20); pArray[4] = (char *)malloc(sizeof(char)* 20); //错误的赋值方法 //pArray[0] = "aaa";已经改变指针pArray[0]的指向了,赋值操作之后pArray[0]指向是一个全局区的字符串 //全局区的字符串是个常量,不可以修改,不可以free /*pArray[0] = "aaa"; pArray[1] = "bvbb"; pArray[2] = "ssss"; pArray[3] = "eee"; pArray[4] = "atttaa";*/ strcpy(pArray[0], "111"); strcpy(pArray[1], "222"); strcpy(pArray[2], "333"); strcpy(pArray[3], "444"); strcpy(pArray[4], "5asfa"); //打印数组 printfArr(pArray, &num); //释放内存 freeMalloc(pArray, &num); if (pArray != NULL) { free(pArray); pArray = NULL; } system("pause");}

 

转载地址:http://nxhzo.baihongyu.com/

你可能感兴趣的文章
VC++获得微秒级时间的方法与技巧探讨(转)
查看>>
HDOJ-1010 Tempter of the Bone
查看>>
MySQL my.cnf参数配置优化详解
查看>>
JavaNIO基础02-缓存区基础
查看>>
日本开设无人机专业,打造无人机“人才市场”
查看>>
190行代码实现mvvm模式
查看>>
PXE部署实例
查看>>
cobbler初探------实现自动安装centos6.4
查看>>
Android Studio 2.0 preview3 BUG
查看>>
兼容几乎所有浏览器的透明背景效果
查看>>
Go语言4
查看>>
jeesite 框架搭建与配置
查看>>
Adb移植(一)简单分析
查看>>
Linux VNC server的安装及简单配置使用
查看>>
阿里宣布开源Weex ,亿级应用匠心打造跨平台移动开发工具
查看>>
Android项目——实现时间线程源码
查看>>
招商银行信用卡重要通知:消费提醒服务调整,300元以下消费不再逐笔发送短信...
查看>>
python全栈_002_Python3基础语法
查看>>
C#_delegate - 调用列表
查看>>
交换机二层接口access、trunk、hybird三种模式对VLAN的处理过程
查看>>