请问为什么一运行下边的程序就说什么内存不能written,然后出错

#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);
}
}

弑天下
浏览 57回答 1
1回答

绝地无双

你使用了线程, 线程给你的函数传递的参数是一个指针(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;}}
打开App,查看更多内容
随时随地看视频慕课网APP