【C/C++语言基础学习】在主函数的定义的指针数组、二维数组通过三级指针在被调用函数分配内存
2017-02-22 20:43
856 查看
程序的功能:在主函数中通过二维数组和指针的定义的字符串,在被调用函数中分配动态内存,并排序。 一、在主函数定义二维数组和指针数组,并初始化
int main(void) { char *p[] = { "11111", "22222", "33333" }; char str[][6] = { "aaaaa", "bbbbb", "ccccc" }; char **p1 = NULL; int len1, len2, len3; len1 = sizeof(p)/sizeof(*p); len2 = 3; int ret = sort(p, len1, str, len2, &p1, &len3); for (int i = 0; i < len3; i++) { cout << p1[i] << endl; } free2(&p1, len3);//调用自定义的释放内存函数 return 0; system("pause"); }二、被调用函数。在主函数的用的二级指针定义的字符串,那么在被调用函数中用三级指针接过来,先要在堆中动态分配一个二维的(len1+len2)大小的指针长度的内存,在分别分配len1大小的内存用来放字符串1的数据和len2大小的内存用来存字符串2的数据。对所有存入的数据进行排序。
int sort(char **p, int len1, char (*str)[6], int len2, char ***p1, int *len3) { char** tempP = (char**)malloc(sizeof(char*)*(len1 + len2)); if (tempP == NULL) { return -1; } int i = 0; int strLen = 0; for (; i < len1; i++) { strLen = strlen(p[i]) + 1; tempP[i] = (char*)malloc(sizeof(strLen)); if (tempP[i] == NULL) { return -2; } strcpy(tempP[i], p[i]); } for (int j = 0; j < len2; j++,i++) { strLen = strlen(str[j]) + 1; tempP[i] = (char*)malloc(sizeof(strLen)); if (tempP[i] == NULL) { return -3; } strcpy(tempP[i], str[j]); } //排序 strLen = len1 + len2; char *myp = NULL; for (int x = 0; x < strLen; x++) { for (int y = x+1; y < strLen; y++) { if (strcmp(tempP[x], tempP[y])>0) { //交换指针指向,也可以用交换内容 myp = tempP[x]; tempP[x] = tempP[y]; tempP[y] = myp; } } } *len3 = strLen; *p1 = tempP; return 0; }三、分配了动态内存那么就要释放内存。在主函数中调用释放内存的函数,释放内存函数如下:
void free2(char ***myp, int len) { char **p = NULL; if (myp == NULL) { return; } p = *myp;//还原成二级指针 if (p == NULL) { return; } for (int i = 0; i < len; i++) { free(p[i]); } free(p); *myp = NULL; }不知道是什么原因导致的,如果有大神知道还望指导一下。 编译环境:win7+VS2013
相关文章推荐
- c++学习笔记 内存四区 函数调用模型 指针强化
- C语言学习7 :二级指针定义,强制转换,多级指针初步,6级指针构造,错误应用*p=&a,错误应用 二级p2,void型指针的兼容性,malloc函数基本用法,malloc分配空间和堆栈空间的区别,验证malloc函数内存的分配,验证malloc函数的越界,内存泄漏,指针不能返回局部变量地址,内存分配
- C语言学习9: malloc动态内存存储,动态内存分配去空格字符增长版,动态内存分配去符号incr增长版,型参和返回值都是int型的函数的指针,main函数的地址也可以用指针指向,typedef定义函数指针,函数定义与嵌套的作用,返回函数指针类型,const作用
- 【C++基础学习】引用和指针、重载、函数、内存管理
- c++ 指针总结 函数参数指针调用和堆栈内存的分配原理
- C/C++学习之C提高----函数调用模型、指针做函数参数、字符串的基本操作、一级指针内存模型建立
- C语言基础之函数、虚拟键盘的使用、数组、指针、动态申请内存、内存泄漏
- C语言学习6 :指针的定义,指针类型要合法,指针要初始化,指针做函数参数,数组和指针的通用性,指针+1所代表的空间,void * 指针,交换函数中的指针,数组和字符型指针区别,字符型指针的应用,使用指针完成字符操作函数
- 程序员面试金典: 9.13 C和C++ 13.10用C编写一个my2DAlloc函数,可分配二维数组。将malloc函数的调用次数降到最少,并确保 可通过arr[i][j]访问该内存。
- C语言基础之函数、虚拟键盘的使用、数组、指针、动态申请内存、内存泄漏
- c++学习笔记 内存四区 函数调用模型 指针强化
- [java学习笔记]java语言基础概述之数组的定义&常见操作(遍历、排序、查找)&二维数组
- 关于C语言中一,二级指针函数中的使用和c语言中和函数发生调用时,实参和形参都会占用内存吗?
- 一劳永逸:关于C/C++中指针、数组与函数复合定义形式的直观解释
- C++动态分配三级指针的内存与释放
- c++基础学习 - 宏的定义和调用
- 内存分配详解、指针与数组[C++][内存管理]
- 定义一个二维数组,写函数来实现对该二维数组求最大值。(要求,用行指针为函数形参)
- 内存分配详解、指针与数组[C++][内存管理]
- C++基础积累(2)指针与数组、指针与函数关系详解