越界導致函式引數的位址改變

2021-10-25 17:49:59 字數 857 閱讀 6259

最近做的專案當中,遇到了乙個函式的引數位址被改變的問題,導致後面系統崩潰。現將其提煉成一段小**,記錄如下。

#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...