關於c語言中函式呼叫時記憶體管理方面的問題

時間 2022-03-14 13:58:49

1樓:匿名使用者

請貼全**,lz描述不全。首先,函式前的static只是說明,本函式僅供本檔案呼叫,而不是返回靜態變數。其次,函式記憶體都是棧自動分配的,不會導致占用1g記憶體,只有不斷向系統申請記憶體才會出現如此情況 。

既然lz這樣說了,給你個建議吧:先設程式用mlloc分配,則把所有malloc替換為mymalloc然後加入**:

void *mymalloc(int isize)

2樓:匿名使用者

一般情況下c裡能造成你這種效果的唯一可能就是 malloc之類申請的記憶體沒用free之類釋放。非一般情況指你用更底層的方法(比如windows得heapalloc之類)申請記憶體來著

----

生化的基本原理我倒是還懂的,並且我堅信就算小學沒上過自然課的程式設計師也能看出來你的問題出在哪兒|||

3樓:

static說明的靜態區域性變數不會隨著函式的執行結束而被釋放,簡單的說靜態區域性變數的生存期與程式相同,而不是與函式相同。所以如果你的靜態字元型指標p,在子函式內不斷地申請開闢空間,而沒有有效地釋放將空間歸還給系統,就會出現你說的情況。

4樓:

囧...

你的陣列定義的size是n+1,引數傳進去的size是n。

引數呼叫方法沒錯,細心,細心啊,老兄...

c語言中函式能呼叫函式嗎,C語言中函式能呼叫函式嗎

來自天鵝洞尊敬的薔薇 你說的是函式巢狀吧?可以的 只是你這個函式a 應該後面沒有分號的! 這很明顯是可以的,你想想,主函式也是乙個函式對不對,可是裡面又呼叫有printf scanf 函式,所以,學習語言是要很靈活的,畢竟你不可能只靠一種語言。補充下 呼叫可以巢狀,但是定義不可以。 可以呼叫的 但是...

c語言函式呼叫問題,C語言函式呼叫問題

貌似風輕 函式的使用有兩種方式 1 在main函式之前宣告,最後在寫函式體 include void print line 宣告void print message 宣告main void print line void print message 2 直接在main函式之前寫函式體 include...

c語言函式呼叫問題,C語言如何呼叫函式

int 和 void 的區別 int 返回值,void 不返回值。當需要返回值給主函式時,用int 當不需要返回值給主函式時,用void。至於括號裡的內容 int n是接收主函式的實參作為形參,就是函式中要用到這個形參。如果不需要從主函式中接收實參,那麼就用void。至於返回值 當函式返回值給主函式...

c語言函式的遞迴呼叫,C語言的函式巢狀呼叫與函式遞迴呼叫有什麼區別

是的,區域性變數會新定義一次,不過僅侷限於區域性變數 全域性變數和靜態變數都是全域性的,要是還沒學暫時不用管 並不能說是 同時 應該說是 同樣 時間上肯定是按照呼叫的先後順序的。遞迴確實會讓程式變慢,但只是相對於不需要遞迴的等價 而且原因也不是記憶體分配導致的,而是因為函式呼叫產生的。這個遞迴呼叫怎...

c語言函式呼叫

記得可以直接 include 1.c 或者使用標頭檔案,鏈結時同時鏈結上1.c 剛才試了一下,include 1.c 是可以的 1.c include void ttt 2.c include include 1.c main 最簡單的辦法是在另外乙個檔案中 include 1.c 同時要跟另外這個...