700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > C语言 二级指针内存模型②

C语言 二级指针内存模型②

时间:2021-09-20 22:38:44

相关推荐

C语言 二级指针内存模型②

//二级指针第二种内存模型#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>//打印数组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");}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。