2015-08-23 1 views
0

У меня есть односторонняя связь между сервером и клиентом с использованием «named pipe». Он работает до сих пор хорошо, но если я закрываю клиентскую программу (нажатием определенной кнопки), я получаю сообщение об ошибке: «Ошибка проверки времени выполнения №2» - поврежден стек вокруг буфера переменной.Сбой проверки выполнения на C++ # 2 - поврежден стек вокруг переменной «buffer»

Я знаю, что буферный массив из именованного канала выделяет память, но после длительного поиска в google я не нашел способ решить эту проблему (чтобы освободить ее). Должен сказать, что я начинаю на C++.

код:

char buffer[1]; 
DWORD numBytesRead = 0; 
BOOL result = ReadFile(
     pipe, 
     buffer, // the data from the pipe will be put here 
     sizeof(buffer), // number of bytes allocated 
     &numBytesRead, // this will store number of bytes actually read 
     NULL // not using overlapped IO 
     ); 
// object recognized, write data from inertaCube into file 
      if (buffer[0] != '0'){ // do something } 

// close program by pressing left CTRL-button 
      if (GetAsyncKeyState(VK_LCONTROL)){ 
       myMeasurement.close(); 
       CloseHandle(pipe); 
       return 0; 
      } 
+0

Нет ничего плохого в отправленном коде. Проблема где-то в коде, который вы не отправляли. – john

+0

«буферный массив из именованного канала выделяет память» не имеет большого смысла. Что ты пытаешься сказать? – john

ответ

0

sizeof(buffer) даст вам размер char в коде, который не t // number of bytes allocated.

+0

Кажется, что один символ выделен в 'char buffer [1]'. –

+0

Действительно. Только что произошло, что размер буфера равен единице (равный sizeof (char)). – Griffin

Смежные вопросы