最近做的專案當中,遇到了乙個函式的引數位址被改變的問題,導致後面系統崩潰。現將其提煉成一段小**,記錄如下。
#include
#include
#include
void
func
(char
*param,
char
*s,char
*buf)
intmain()
;char
*param =
malloc(32
);char
*s =
"i love chaina"
;printf
("%s before param:%p,s:%p,func:%p\n"
,__function__,param,s,func)
;func
(param,s,buf)
;printf
("%s after param:%p,s:%p,func:%p\n"
,__function__,param,s,func)
;free
(param)
;}
編譯執行後結果如下圖:
1.在對陣列賦值的時候一定要注意長度問題,防止越界的發生。
2.對於乙個變數在進入乙個函式前後位址發生變化的情形,可以從函式體裡面是否存在變數越界的情況。
由於畢竟是小白一枚,不是很明白函式的壓棧,為什麼func函式的最後列印的param位址沒有改變,函式返回後param的位址就改變了?請各位大佬幫忙解答一下。
Python改變引數值的函式
例1 銀行賬戶計算利率 賬戶餘額計算利息的函式 def addinterest balance,rate newbalance balance 1 rate balance newbalance def main amount 1000 rate 0.05 addinterest amount,ra...
Python函式預設引數導致的BUG
最近在乙個多執行緒網路伺服器程式中,發現資料經常錯亂,而且,錯亂的資料是結構化的,並不是字串錯亂.最後,才發現是傳送函式使用了預設引數,而且引數的型別不是原始型別,而是乙個列表.可以這樣重現 def oh my god a a.append 1 print a oh my god oh my god...
指標與位址 函式引數的關係
1.基本概念 指標是儲存變數位址的變數。指標存在的兩個目的 1 指標是表達某個計算的唯一途徑 2 使用指標可以生成更高效 更緊湊的 通常情況,機器的乙個位元組可以存放乙個char型別資料,兩個相鄰的位元組儲存單元可儲存乙個short 短整型 型別的資料,而四個相鄰的位元組儲存單元可以儲存乙個long...