user-0 提问: typedef 定义结构体 多级指针问题

回复:
user: user-1
content: //在堆中开辟一个2×3×4×5的4维int数组 #include <stdio.h> #include <malloc.h> int ****p; int h,i,j,k; void main() {     p=(int ****)malloc(2*sizeof(int ***));     if (NULL==p) return;     for (h=0;h<2;h++) {         p[h]=(int ***)malloc(3*sizeof(int **));         if (NULL==p[h]) return;         for (i=0;i<3;i++) {             p[h][i]=(int **)malloc(4*sizeof(int *));             if (NULL==p[h][i]) return;             for (j=0;j<4;j++) {                 p[h][i][j]=(int *)malloc(5*sizeof(int));                 if (NULL==p[h][i][j]) return;             }         }     }     for (h=0;h<2;h++) {         for (i=0;i<3;i++) {             for (j=0;j<4;j++) {                 for (k=0;k<5;k++) {                     p[h][i][j][k]=h*60+i*20+j*5+k;                 }             }         }     }     for (h=0;h<2;h++) {         for (i=0;i<3;i++) {             for (j=0;j<4;j++) {                 for (k=0;k<5;k++) {                     printf(" %3d",p[h][i][j][k]);                 }                 printf("\n");             }             printf("--------------------\n");         }         printf("=======================\n");     }     for (h=0;h<2;h++) {         for (i=0;i<3;i++) {             for (j=0;j<4;j++) {                 free(p[h][i][j]);             }             free(p[h][i]);         }         free(p[h]);     }     free(p); } //   0   1   2   3   4 //   5   6   7   8   9 //  10  11  12  13  14 //  15  16  17  18  19 //-------------------- //  20  21  22  23  24 //  25  26  27  28  29 //  30  31  32  33  34 //  35  36  37  38  39 //-------------------- //  40  41  42  43  44 //  45  46  47  48  49 //  50  51  52  53  54 //  55  56  57  58  59 //-------------------- //======================= //  60  61  62  63  64 //  65  66  67  68  69 //  70  71  72  73  74 //  75  76  77  78  79 //-------------------- //  80  81  82  83  84 //  85  86  87  88  89 //  90  91  92  93  94 //  95  96  97  98  99 //-------------------- // 100 101 102 103 104 // 105 106 107 108 109 // 110 111 112 113 114 // 115 116 117 118 119 //-------------------- //======================= //

user: user-2
content: 动态内存申请和释放配对的，不释放指不定什么时候就会出现内存泄露滴

user: user-2
content: 二级指针已经够头大的了，三级指针我能说个靠吗，楼主你如果没晕的话，我你

user: user-3
content: 还有个问题是如果我在子函数中使用calloc或者malloc 但是不用free函数释放的话,子函数执行完之后,calloc或者malloc 开辟的空间应该不会自动被释放的吧? 是的，结果会造成内存泄漏。  指针可以用，不能乱用，否则到最后会把自己搞晕的

user: user-4
content: languagePtr pLanguage;  //定义结构体指针 languagePtr *ppLanguage; //这是定义二级指针么 languagePtr **ppppLanguage; //这是定义三级指针么  回答：是的

user: user-5
content: 什么的需要导致你想到用多级指针啊！ 这样你会坑了你自己的！换个别的思路吧！

user: user-6
content: 不建议用两级以上的指针，最后总要确保malloc/free是配对的。  引用 楼主 summit677 的回复:定义结构体指针: typedef struct language { int id; char name[66]; char ISOCode[34]; } *languagePtr;   以下定义是什么意思:  languagePtr pLanguage;  //定义结构体指针 languagePtr *ppLanguage; //这是定义二级指针么 languagePtr **ppppLanguage; //这是定义三级指针么    还有个问题是如果我在子函数中使用calloc或者malloc 但是不用free函数释放的话,子函数执行完之后,calloc或者malloc 开辟的空间应该不会自动被释放的吧? 例如:  void main() { int iError; int *temp languagePtr **ppppLanguage; ppppLanguage=(languagePtr **)malloc(sizeof(languagePtr *));  iError=getLanguage(ppppLanguage); *temp=*ppppLanguage; free(ppppLanguage); } getLanguage(languagePtr **ppppLanguage) { int i=10; languagePtr *ppLanguage=NULL; *ppppLanguage=ppLanguage=(languagePtr *)calloc(i+ 1, sizeof(languagePtr )); for(j=0;j<i;j++) { languagePtr pLanguage= (languagePtr )calloc(1, sizeof(language)); *ppLanguage++ = pLanguage; } };   这个程序会有什么问题???

user: user-7
content: 用多级指针的不一定都是高手

user: user-1
content: 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。

user: user-8
content: 是的，两级以上的指针从没用过。楼主要干嘛？

user: user-0
content: 是用C++ 写一个dll 访问数据库,然后labview调用dll. 但是labview的数据格式事和C不同的.