Почему free () продолжает вызывать точку останова - PullRequest
0 голосов
/ 23 июня 2018

Может кто-нибудь сказать, почему моя функция free () продолжает вызывать точку останова?Затем я получаю ошибку библиотеки времени выполнения Microsoft Visual C ++: сбой отладочного утверждения!Программа: ... .exe, файл: minkernel \ crts \ ucrt \ src \ appcrt \ heap \ debug_heap.cpp ... Выражение: _CrtlsValidHeapPointer (block).

#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "IPHLPAPI.lib")


int main()
{

IP_ADAPTER_INFO *pAdapterInfo = malloc(sizeof(IP_ADAPTER_INFO));

if (pAdapterInfo == NULL)
{
    return 1;
}

ULONG size = sizeof(*pAdapterInfo);
ULONG * pOutBufLen = &size;

if(GetAdaptersInfo(pAdapterInfo, pOutBufLen) == ERROR_BUFFER_OVERFLOW) //When this error code is returned, the pOutBufLen parameter points to the required buffer size.
{
    pAdapterInfo = realloc(pAdapterInfo, *pOutBufLen);
}
else
{
    return 1;
}

if(GetAdaptersInfo(pAdapterInfo, pOutBufLen) == NO_ERROR)
{
    while (pAdapterInfo->Next != NULL)
    {
        printf("%s\n", pAdapterInfo->Description);
        pAdapterInfo = pAdapterInfo->Next;
    }

}

free(pAdapterInfo);


getchar();

return 0;

}

РЕШЕНИЕ: Хорошо, спасибо завсем за ваши ответы.Я исправил проблему с другим указателем, который я назвал pAdapter:

int main()
{
IP_ADAPTER_INFO *pAdapterInfo = malloc(sizeof(IP_ADAPTER_INFO));
IP_ADAPTER_INFO *pAdapter = NULL; //for memory freeing purposes only
...

if(GetAdaptersInfo(pAdapterInfo, pOutBufLen) == NO_ERROR)
{
    pAdapter = pAdapterInfo;
    while (pAdapter->Next != NULL)
    {
        printf("%s\n", pAdapter->Description);
        pAdapter = pAdapter->Next;
    }

}

free(pAdapterInfo);
...