运行时检查失败 #2 - 变量周围的堆栈---已损坏
Run-Time Check Failure #2 - Stack around the variable --- was corrupted
当我运行此程序时,出现以下错误:运行时检查失败 #2 - 变量"out_result"周围的堆栈已损坏。我尝试打印out_result的长度以检查缓冲区是否有溢出,但长度始终小于 CHAR_MAX_LENGTH =512有什么想法吗?
void GetCPUOutResult(FILE* cpu_out_file_pointer,char* out_result)
{
char temp[CHAR_MAX_LENGTH+1] = {0};
int char_index =fgetc(cpu_out_file_pointer) ,index=0;
while ( ((char)char_index) != 'n')
{
temp[index]=(char)char_index;
char_index =fgetc(cpu_out_file_pointer);
index++;
}
temp[index]=' ';
sprintf_s( out_result,
MAX_CMD_LINE_LENGTH,
temp,
NULL);
}
void WorkerThreadFunction(THREAD_PARAMETERS* parameters)//LPVOID lpParam
{
//THREAD_PARAMETERS* parameters = (THREAD_PARAMETERS *) lpParam;
char *mission;
char cpu_file_name_in[CHAR_MAX_LENGTH];
char cpu_file_name_out[CHAR_MAX_LENGTH];
char out_result[CHAR_MAX_LENGTH+1]={0};
FILE *cpu_in_file_pointer, *cpu_out_file_pointer;
HANDLE mutexes_handles[NUM_MUTEXES];
int thread_id=parameters->thread_id;
char *log_file_name=parameters->log_file_name;
HANDLE youHaveWorkToDo=parameters->youHaveWorkToDoSemaphore[thread_id];
HANDLE readyToAcceptNewWork=parameters->readyToAcceptNewWorkSemaphore[thread_id];
//open file cpu<threadID>.in for writing
cpu_file_name_in[ 0 ] = ' ';
GenerateCPUFileName(cpu_file_name_in,"in",thread_id);
cpu_in_file_pointer = _fsopen(cpu_file_name_in, "w", _SH_DENYNO);
//open file cpu<id>.out for reading
cpu_file_name_out[ 0 ] = ' ';
GenerateCPUFileName(cpu_file_name_out,"out",thread_id);
cpu_out_file_pointer = _fsopen( cpu_file_name_out, "r", _SH_DENYNO );
while (TRUE)
{
printf("Worker Thread: %d is waiting for work from dispatchern",thread_id);
WaitForDispatcherToGiveMeWorkToDo(youHaveWorkToDo);
THREADS_STATUS_ARRAY[thread_id]=0;/////////////////////////////////////////////////////////////////
printf("Worker Thread: %d GOT work from dispatchern",thread_id);
mission= WORKER_THREADS_BUFFER[thread_id];
printf("Worker Thread: %d is executing mission %sn",thread_id,mission);
//pre mission execution writing to log file with lock
mutexes_handles[0] = AquireSingleInstanceLock(FIRST_INSTANCE_MUTEX_NAME);//Set LOCK
printf("Worker Thread: %d is trying to witre to INPUT LOGFILEn",thread_id);
WriteToLogFile(log_file_name,
thread_id,
" started running mission ",
mission);
printf("Worker Thread: %d wrote successfully into INPUT LOGFILEn",thread_id);
ReleaseMutex( mutexes_handles[0] );//free LOCK
//Write mission from worker thread buffer into cpu<id>.in
sprintf(mission,"%sn",mission);
fwrite( mission, sizeof( char ), strlen(mission), cpu_in_file_pointer);
fflush( cpu_in_file_pointer );//flush data from accoiated buffer to the file
printf("Worker Thread: %d wrote successfully in cpu%d.in coren",thread_id,thread_id);
//get result from cpu<id>.out
printf("Worker Thread: %d is trying to get result from CPU<Id>.OUTn",thread_id);
Sleep(50);
GetCPUOutResult(cpu_out_file_pointer,out_result);
printf("Worker Thread: %d got result:%s from CPU<Id>.OUTn result length is:%dn",thread_id,out_result,strlen(out_result));
///post mission execution writing to log file with lock
printf("Worker Thread: %d trying to write result:%s into OUT LOG FILEn",thread_id,out_result);
mutexes_handles[1] = AquireSingleInstanceLock(SECOND_INSTANCE_MUTEX_NAME);//Set LOCK
WriteToLogFile(log_file_name,thread_id," is done! Mission result is ",out_result);
ReleaseMutex( mutexes_handles[0] );//free LOCK
printf("Worker Thread: %d successfully wrote result:%s into OUT LOG FILEn",thread_id,out_result);
printf("Worker Thread: %d successfully executed mission:%s n",thread_id,mission);
if (strcmp(mission,"quitn") == 0 )
{
break;
}
else
{
InformDispatcherThreadIsReadyToAcceptWork(readyToAcceptNewWork,
(LPLONG)&THREADS_STATUS_ARRAY[thread_id]);
THREADS_STATUS_ARRAY[thread_id]=1;/////////////////////////////////////////////////////////////////
}
}
return;
}
更改此行
sprintf_s(out_result, MAX_CMD_LINE_LENGTH,
temp,
NULL);
成为这个:
sprintf_s(out_result, CHAR_MAX_LENGTH,
"%s"
temp);
有关sprintf_s()
的详细信息,请阅读此处:http://msdn.microsoft.com/en-us/library/ce3zzk1k.aspx(页面末尾也有示例)
相关文章:
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 变量"A"周围的堆栈已损坏
- 运行时检查失败 #2 - 变量"e"周围的堆栈已损坏。发生
- 运行时检查失败 #2 - 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 - 变量"l1"周围的堆栈已损坏
- 数组变量周围的堆栈已损坏
- 运行时检查失败 - 变量周围的堆栈已损坏
- 调试:运行时检查失败 #2 - 变量"LoggerThread"周围的堆栈已损坏
- 运行时检查失败 #2 - 变量"数字选择"周围的堆栈已损坏
- 运行时间检查:变量周围的堆栈已损坏
- 变量"name"周围的堆栈已损坏C++
- MS 工作室 17 变量周围的堆栈已损坏
- 错误:运行时检查失败 #2 - 变量周围的堆栈已损坏
- C++指针:数组的堆栈已损坏
- 变量周围的堆栈已损坏
- C++ 变量周围的堆栈已损坏
- 运行时检查失败 #2 - 变量周围的堆栈---已损坏
- VS2010和OpenCV:变量周围的堆栈已损坏
- 指针函数参数已损坏,堆栈已损坏