[問題] createthread送參數的問題
遇到的問題: (題意請描述清楚)
為了解決thread單一參數的問題,我把數個參數包裝進一個struct
但送參數進createthread建立的thread時參數不正確(不是送進去才錯誤,
在沒有createthread時應正常的參數在多了createthread程式碼後出問題)
希望得到的正確結果:
參數正確
程式跑出來的錯誤結果:
於 0x01061116 的 OS10_project1.exe 中發生未處理的例外狀況: 0xC0000005: 寫入位
置 0xe1695075 時發生存取違規
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
VC++2008, windows
有問題的code: (請善用置底文標色功能)
int main(){
宣告等等
for(int k=0 ; k<filtering_times ; k++)
{
for(int j=0 ; j<imgHeight ; j++){
for(int i=0 ; i<imgWidth ; i++)
{
arg1.w=i;
arg1.h=j;
arg1.color=MYGREEN;
arg0.w=i; //arg0.w變成2685520
arg0.h=j; //arg0.h變成15857984
arg0.color=MYRED; //arg0.color變成2002957461
arg2.w=i; 去掉Createthread後測試
arg2.h=j; i,j;甚至arg0.w,arg0.j
arg2.color=MYBLUE;arg0.color都是正常的
T[0]=CreateThread
(NULL, 0,(LPTHREAD_START_ROUTINE)myboxfilter, (LPVOID) &arg0, 0, &tid);
T[1]=CreateThread
(NULL, 0,(LPTHREAD_START_ROUTINE)myboxfilter2, (LPVOID) &arg1, 0, &tid2);
T[2]=CreateThread
(NULL, 0,(LPTHREAD_START_ROUTINE)myboxfilter3, (LPVOID) &arg2, 0, &tid3);
WaitForMultipleObjects(3, T, TRUE, INFINITE);
DWORD myboxfilter(filter_arg f_arg)
{
/* box filter example */
int tmp=0;
int a, b;
int ws=(int)sqrt((float)FILTER_SIZE); //ws for sqrt mask size.
for(int j=0 ; j<ws ; j++)
for(int i=0 ; i<ws ; i++)
{
a = f_arg.w+i-(ws/2); b = f_arg.h+j-(ws/2);
if(a<0 || b<0 || a>imgWidth || b>imgHeight )continue;
tmp += filter_arr[j*ws+i] * pic_in[(b*imgWidth+a)*3+f_arg.color];
}
tmp = tmp/filter_avg;
if(tmp < 0)tmp=0;
if(tmp > 255)tmp=255;
pic_out[(f_arg.w*imgWidth+f_arg.h)*3+f_arg.color] = (unsigned char)tmp;
return 0;
}
補充說明:
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.67.97
→
11/30 00:01, , 1F
11/30 00:01, 1F
→
11/30 00:01, , 2F
11/30 00:01, 2F
→
11/30 00:04, , 3F
11/30 00:04, 3F
→
11/30 00:12, , 4F
11/30 00:12, 4F
※ 編輯: siriusu 來自: 140.113.67.97 (11/30 00:12)
→
11/30 00:18, , 5F
11/30 00:18, 5F
→
11/30 00:37, , 6F
11/30 00:37, 6F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章