日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【C 语言】内存四区原理 ( 栈内存与堆内存对比示例 | 函数返回的堆内存指针 | 函数返回的栈内存指针 )

發布時間:2025/6/17 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C 语言】内存四区原理 ( 栈内存与堆内存对比示例 | 函数返回的堆内存指针 | 函数返回的栈内存指针 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、函數返回的堆內存指針
  • 二、函數返回的棧內存指針





一、函數返回的堆內存指針



在 main 主函數中 , 調用 get_memory 子函數 , 返回 malloc 初始化的堆內存 , 可以 正常 使用指針 操作該 堆內存 ;


代碼示例 :

#include <stdio.h> #include <stdlib.h>/* 該方法獲取一塊內存地址 */ char *get_memory(int memory_size) {// 聲明指針, 用于接收分配內存地址// 該變量是在棧內存中char *p = NULL;// 堆內存分配一塊內存// 這塊內存不會因為 get_memory 函數執行完畢導致釋放p = (char *)malloc(sizeof(char) * memory_size);// 如果內存分配失敗, 返回空if(p == NULL){return NULL;}// 返回分配的內存return p; }int main() {char *p = NULL;// 獲取內存地址 , 獲取的是堆內存的地址// 該堆內存是在 get_memory 函數中進行分配的p = get_memory(10);if(p == NULL){return 0;}// 向 p 指向的內存空間中拷貝數據strcpy(p, "123456");// 向printf("%s\n", p);return 0; }

執行結果 :

123456





二、函數返回的棧內存指針



在 main 主函數中 , 調用 get_memory 子函數 , 返回棧內存中初始化的數組首地址 , 可以 使用指針 操作該 返回的數組首地址地址 , 讀取 數據異常 ;

get_memory 函數中 , 聲明的棧內存數組 , 只能在 get_memory 函數中使用 , 超出該函數的范圍 , 則該數組空間被回收了 ; 在外部函數中強行使用該地址 , 會造成位置結果 , 最壞宕機 , 最好情況訪問出異常結果 ;


代碼示例 :

#include <stdio.h> #include <stdlib.h>/* 該方法獲取一塊內存地址 */ char *get_memory(int memory_size) {// 棧內存中初始化一個數組char buffer[memory_size];// 向數組中拷貝數據strcpy(buffer, "123456");// 打印棧內存數組中的數據printf("get_memory : %s\n", buffer);// 返回數組首地址return buffer; }int main() {char *p = NULL;// 獲取 get_memory 函數中的棧內存地址p = get_memory(10);// 打印函數中獲取的 棧內存 數組 首地址內容printf("main : %s\n", p);return 0; }

執行結果 :

get_memory : 123456 main : (null)

總結

以上是生活随笔為你收集整理的【C 语言】内存四区原理 ( 栈内存与堆内存对比示例 | 函数返回的堆内存指针 | 函数返回的栈内存指针 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。