亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問為什么一運行下邊的程序就說什么內存不能written,然后出錯

請問為什么一運行下邊的程序就說什么內存不能written,然后出錯

C++
弒天下 2023-03-03 18:14:29
#include "stdafx.h"#include <conio.h>#include <stdlib.h>#include <fstream.h>#include <io.h>#include <string.h>  #include <stdio.h>#include "windows.h"int customer[10];void bank1(int i){if(customer[i]=0){customer[i]=1;HANDLE mutex1;DWORD wait_mutex;mutex1=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex1");wait_mutex=WaitForSingleObject(mutex1,-1);cout<<"一號柜臺叫"<<i<<"號"<<endl;cout<<"一號柜臺服務中"<<endl;Sleep(1000);ReleaseMutex(mutex1);cout<<"一號柜臺服務完畢"<<endl;}}void bank2(int i){if(customer[i]=0){customer[i]=1;HANDLE mutex2;DWORD wait_mutex;mutex2=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex2");wait_mutex=WaitForSingleObject(mutex2,-1);cout<<"二號柜臺叫"<<i<<"號"<<endl;cout<<"二號柜臺服務中"<<endl;Sleep(800);ReleaseMutex(mutex2);cout<<"二號柜臺服務完畢"<<endl;}}void bank3(int i){if(customer[i]=0){customer[i]=1;HANDLE mutex3;DWORD wait_mutex;mutex3=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex3");wait_mutex=WaitForSingleObject(mutex3,-1);cout<<"三號柜臺叫"<<i<<"號"<<endl;cout<<"三號柜臺服務中"<<endl;Sleep(500);ReleaseMutex(mutex3);cout<<"三號柜臺服務完畢"<<endl;}}void main(){for (int i=0;i<10;i++){customer[i]=0;}HANDLE mutex1;HANDLE mutex2;HANDLE mutex3;mutex1=CreateMutex(NULL,FALSE,"mutex1");mutex2=CreateMutex(NULL,FALSE,"mutex2");mutex3=CreateMutex(NULL,FALSE,"mutex3");HANDLE h_Thread[10];DWORD a;for( i=0;i<10;i++){  h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)bank1,&i,0,&a);h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)bank2,&i,0,&a);h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)bank3,&i,0,&a);WaitForSingleObject(h_Thread[i],5000);}}
查看完整描述

1 回答

?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

你使用了線程, 線程給你的函數傳遞的參數是一個指針(CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)bank1,&i,0,&a); 所以在這里他把i的地址作為bank1的參數傳遞了過去,你在bank1函數里直接作為整型的值來使用(是個不確定的數比較大) 所以在if(customer[i]=0) 這句的時候數組就越界了,當然崩潰啦!
注意你寫程序的時候if語句的判斷也有問題 f(customer[*i]=0)少了個=號,應該寫成f(customer[*i]==0)
可以試試看這樣寫(三個都一樣)
void bank1(int *i)
{
if(customer[*i]==0)
{
customer[*i]=1;
HANDLE mutex1;
DWORD wait_mutex;
mutex1=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex1");
wait_mutex=WaitForSingleObject(mutex1,-1);
cout<<"一號柜臺叫"<<i<<"號"<<endl;
cout<<"一號柜臺服務中"<<endl;
Sleep(1000);
ReleaseMutex(mutex1);
cout<<"一號柜臺服務完畢"<<endl;
}
}

查看完整回答
反對 回復 2023-03-06
  • 1 回答
  • 0 關注
  • 63 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號