C 为什么free()总是触发断点

C 为什么free()总是触发断点,c,breakpoints,free,C,Breakpoints,Free,有人能告诉我为什么我的free()函数总是触发断点吗?然后我得到一个微软Visual C++运行库错误:调试断言失败!节目:。exe,文件:minkernel\crts\ucrt\src\appcrt\heap\debug\u heap.cpp。。。表达式:\ CrtlsValidHeapPointer(块) 很可能是您损坏了堆。while()循环正在修改padapternfo变量。所以free()不能再工作了。您必须保留原始值。此外,您正在修改padapternfo,它不再指向while循环中

有人能告诉我为什么我的free()函数总是触发断点吗?然后我得到一个微软Visual C++运行库错误:调试断言失败!节目:。exe,文件:minkernel\crts\ucrt\src\appcrt\heap\debug\u heap.cpp。。。表达式:\ CrtlsValidHeapPointer(块)


很可能是您损坏了堆。while()循环正在修改padapternfo变量。所以free()不能再工作了。您必须保留原始值。此外,您正在修改
padapternfo
,它不再指向
while
循环中释放的原始内存块。因此,如果你得到了一些东西,然后在链表中向前移动,然后尝试释放指针,你将不再尝试释放你分配的东西。相反,请确保释放分配的原始指针。
#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;

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