关于调用子函数给主函数指针分配内存
生活随笔
收集整理的這篇文章主要介紹了
关于调用子函数给主函数指针分配内存
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
典型的錯誤例子如下
在這個主函數的指針給子函數傳遞一個指針,而在子函數中形參有開辟了一塊內存,此子函數的指針的內存里存儲的地址與主函數是同一地址,
即主函數的指 針和子函數形參的指針都指向同一塊內存的地址,但是在子函數里,為子函數的指針申請了一塊空間,并不影響主函數的指針。
因為子函數的指針又指向了別的內 存。要想分配成功就得用下面兩個例子。一個是在子函數的形參中第一指向指針的指針即二級指針,
叫子函數的指針指向實參的指針,另外一種方法就是返回子函數 分配完內存的指針。
失敗的例子
#include<stdio.h> #include<stdlib.h> #include<string.h>fen_pei(char *p,int n) { p=(char *)malloc(n*sizeof(char *)); if(p==NULL) {printf("allocation failture\n");exit(0); }}int main() { char *str1=NULL; fen_pei(str1,10); strcpy(str1,"hello");printf("%s\n",str1);return 0; } 成功的方法1,返回分配內存的指針
#include<stdio.h> #include<stdlib.h> #include<string.h>char *fen_pei(char *p,int n) { p=(char *)malloc(n*sizeof(char *)); if(p==NULL) {printf("allocation failture\n");exit(0); } return p; }int main() { char *str1=NULL; str1=fen_pei(str1,10); strcpy(str1,"hello");printf("%s\n",str1);return 0; } 成功的方法2.,在子函數形參中使用指向指針的指針
#include<stdio.h> #include<stdlib.h> #include<string.h>void fen_pei(char **p,int n) { *p=(char *)malloc(n*sizeof(char *)); if(p==NULL) {printf("allocation failture\n");exit(0); }}int main() { char *str1=NULL; fen_pei(&str1,10); strcpy(str1,"hello");printf("%s\n",str1);return 0; }
總結
以上是生活随笔為你收集整理的关于调用子函数给主函数指针分配内存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二叉树的建立
- 下一篇: C++中内存分配、函数调用和返回值问题