动态内存分配到底为谁分配内存空间【浅谈动态内存的一个实例】
生活随笔
收集整理的這篇文章主要介紹了
动态内存分配到底为谁分配内存空间【浅谈动态内存的一个实例】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為了動態的管理寶貴的內存,許多程序中要使用到動態內存分配。一般情況下,在c語言中,使用malloc()函數來分配指定大小的內存空間,用free()函數來釋放這塊內存空間。但是,往往初學者在編寫這類程序時會出錯,而許多錯誤是因為到底為誰分配了這塊內存不清楚導致的。來看下面一段程序:
#include <stdio.h> #include <malloc.h>void main() {int i=100;int *p;p = (int*)malloc(sizeof(int));if (p == NULL) {printf("內存分配不成功");} else {p=&i;printf("i=%d\n",i);printf("p=%d\n",*p);free(p);p=NULL;}while(1); }這段程序在編譯和連接時都不會出錯,并且也能在運行時產生正確的結果,但是,最終會報出內存錯誤。這是為什么呢?
這段程序雖然嚴格遵從了malloc()函數和free()函數的使用規則,按照編寫者的意向,它是不會產生內存錯誤的,但是確實出現了內存錯誤,其根本原因就在于編寫者沒有明白分配的這塊內存分配給了誰!
編寫者可能認為,這塊內存分配給了指針p,也就是給p分配了一塊sizeof(int)大小的內存空間,這恰恰是問題的關鍵。因為這段程序并不是將sizeof(int)大小的內存空間分配給了p,而是分配給了p指向的那塊內存空間。而在上面的程序中,這塊內存空間是存放int型的變量i的,而我們知道,int型的變量i是放在棧中的,而棧空間是由編譯器來分配的,而不是由程序員來分配的。既然不是由程序員分配的,那么它的釋放也就不由程序員來管理,而是由編譯器來管理的。這下明白了吧,程序員想管理一塊本來不歸自己管理的內存空間,肯定會出現內存錯誤。
總結
以上是生活随笔為你收集整理的动态内存分配到底为谁分配内存空间【浅谈动态内存的一个实例】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 特斯拉降价到20万出头 网友忍不住要下单
- 下一篇: 汽车行业中的AUTOSAR与OSEK到底