C 为什么free()总是触发断点
有人能告诉我为什么我的free()函数总是触发断点吗?然后我得到一个微软Visual C++运行库错误:调试断言失败!节目:。exe,文件:minkernel\crts\ucrt\src\appcrt\heap\debug\u heap.cpp。。。表达式:\ CrtlsValidHeapPointer(块)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循环中
很可能是您损坏了堆。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);