WSALookupServiceNext в BlueTooth, исключение поврежденной кучи

0

мы получим прямо к делу, следующий сниппет возвращается

Unhandled exception at 0x7786AA3C (ntdll.dll) in Project4.exe: 0xC0000374: A heap has been corrupted (parameters: 0x7787FE38).

Snippet:

while(true)
{
    if(WSALookupServiceNext(lookup_handle,flags,&query_set_length,query_set)==NO_ERROR)
    {
        char buffer[40] = {0};
        DWORD buffer_size = sizeof(buffer);

        device_socket_address = (SOCKADDR_BTH*)query_set->lpcsaBuffer->RemoteAddr.lpSockaddr;
        result = device_socket_address->btAddr;


        WSAAddressToString(query_set->lpcsaBuffer->RemoteAddr.lpSockaddr,sizeof(SOCKADDR_BTH),NULL,buffer,&buffer_size);

        fprintf(stdout,"found device: %s - %s\n", buffer,query_set->lpszServiceInstanceName);
        break;

    }

}

Разрыв происходит на WSAAddressToString

перед вызовом WSALookupServiceNext

//start the LookUp service for bluetooth devices
if(WSALookupServiceBegin(query_set,flags,&lookup_handle)==SOCKET_ERROR)
{

    fprintf(stderr, "something went completely wrong... %d",WSAGetLastError());
    system("PAUSE");
    ExitProcess(2);
}

Инициализация набора запросов

DWORD query_set_length = sizeof(WSAQUERYSET);
DWORD flags = LUP_CONTAINERS | LUP_FLUSHCACHE | LUP_RETURN_NAME | LUP_RETURN_ADDR;

WSAQUERYSET query_set = (WSAQUERYSET*)malloc(query_set_length);

ZeroMemory(query_set,query_set_length);


query_set->dwSize = query_set_length;
query_set->dwNameSpace = NS_BTH;
query_set->dwNumberOfCsAddrs = 0;

Обновление: источником проблемы является WSALookupServiceNext, я подозреваю, что мой дескриптор (lookup_handle) передан неправильно.

  • Мой вопрос, что вызвало кучу коррупции, и как я могу ее исправить?

  • Я просто хочу найти устройство и смогу отправить ему тестовую строку.

  • Я также думаю, что стоит упомянуть, что у меня уже есть Android-устройство с поддержкой BlueTooth в паре с моим ПК (не обязательно связанное, хотя).
  • любая помощь очень ценится.
  • 0
    Первое, что приходит на ум, - это буфер, который вы передаете WSALookupServiceNext или WSAAddressToString , недостаточно велик, и куча становится перегруженной.
  • 0
    msdn.microsoft.com/en-us/library/windows/desktop/… Именно поэтому мой буфер имеет длину 40 символов.
Теги:
bluetooth
exception
winsock
heap-corruption

1 ответ

0
Лучший ответ

Я удалил LUP_FLUSCACHE и LUP_CONTAINERS из своих флагов,

DWORD flags = LUP_RETURN_NAME | LUP_RETURN_ADDR;

и использовать его только в WSALookupServiceBegin

if(WSALookupServiceBegin(query_set,flags |= LUP_FLUSHCACHE | LUP_CONTAINERS,&lookup_handle)==SOCKET_ERROR)
    {

        fprintf(stderr, "something went completely wrong... %d",WSAGetLastError());
        system("PAUSE");
        ExitProcess(2);
    }

это, кажется, предотвращает проблему. Я просто прочитал эту запись MSDN

хе-хе, я также использовал fprintf для stdin вместо stdout (могу ли я гореть в вечном огне).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню