#include<stdio.h>
#include<vadefs.h>
#include<stdlib.h>
void userret(void){
printf("調用了userret,怪我咯\n");
printf("sdfa");
return;
}
void simple_va_fun(int i, ...)
{
va_list arg_ptr;
int *a;
int j = 0;
int k = 0;
int ret_num;
_crt_va_start(arg_ptr, i);
j = _crt_va_arg(arg_ptr, int);
//_crt_va_start(arg_ptr, j);
k = _crt_va_arg(arg_ptr, int);
a = &i;
*(a-1) = userret;
printf("%d %d %d\n", i,j,k);
printf("%d\n", userret);
return;
}
void main(void){
int k;
simple_va_fun(20,30,40);
printf("useret函數返回成功");
}
如上述代碼,編譯成功,運行時simple_va_fun函數成功返回到useret函數,但是useret函數返回時出現錯誤:執行位置 0x00000014 時發生訪問沖突。初步探明:0x00000014為simple_va_fun的第一個參數20,但是不知道為什麼返回地址返回到了第一個參數的值所示的地址處,求大神解答如何解決??萬分感謝!!!!!
修改一下棧空間的內容,把返回地址付給對應的棧空間即可