最近在做安裝包(inno setup),也沒好好看c++,然後安裝包出了點小問題,說是堆溢位,自己也沒理解透堆疊這個概念,在這裡我就簡單的總結一下。
1.堆在c++ 中,只有程式設計師自己分配的記憶體才會儲存到堆中,比如int *b = (int *)malloc(sizeof(int)*1) 這就算自己手動分配的乙個,然後它就儲存在堆中,當你兩次呼叫的時候會發現,即使你不手動釋放記憶體,它的記憶體位址也會改變,所以造成的就是你越不釋放,然後不停的new記憶體就會越來越少,直到沒有。
2.棧當然,在棧中剛好相反,比如int i = 0; 好,這個系統就自動分配到棧中,它會有乙個記憶體位址,比如0x00b121c0,如果你不釋放,再重新呼叫的話,它的記憶體位址還是不會變的,即使你把裡面的內容拷貝替換了,下次還會給你分配這個位址,內容就是你替換的內容
說的....我都想抽自己了,舉例說下,就是說:
int main()
test();//第一次呼叫會發現copy的遠遠超出了i,然後再看位址會發現,紅色不坎入目
test();
void test()
int i;
int j;
char temp = "asdjklwqid";
strcopy(i, temp);
return 0;
對於遞迴的個人理解 2
對於上篇文章所說的 遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的 量。遞迴的能力在於用有限的語句來定義物件的無限集合 這只是乙個表象,最主要的思想是看起來規模很大的問題劃分為乙個或者多個規模更小的子問題,而這些子問題可以用同樣的方法去求解。用遞迴來解決問題的時候,...
對於Stack的簡單理解
stack其實很簡單,感覺陌生的主要的原因是新手沒怎麼接觸過或者不常用,以及對stack本質上到底是什麼東西不清楚,如果知道了stack本質上到底是個什麼東西,stack就再簡單不過了。stack 本質上就是乙個 集合 跟 arraylist 集合一樣,都是儲存資料的乙個集合。因此,stack也就很...
對於ajax的簡單理解
jquery 中load 方法是簡單強大的ajax方法,這個方法是在從伺服器載入資料,並且返回資料放入選擇器選擇的元素中。它的語法結構是這樣的 selector load url,data,callback url是乙個必須引數,就是需要載入的url,date和callback是都是可選引數,dat...