gpt4 book ai didi

c - 此版本的 C 程序内存不足。有人请告诉我为什么内存不足

转载 作者:行者123 更新时间:2023-11-30 21:30:55 25 4
gpt4 key购买 nike

此版本的 C 程序内存不足。有人请告诉我为什么内存不足。我在面试时遇到了这个问题。

typedef struct pnode
{
void * ptrData;
struct pnode *pNext;
} NODE ;

void AddNode(NODE *ptrParent, int z);
void Cleanup(NODE *pStart);
void freeList(NODE *pHead);

int main(int argc, char *argv[])
{
NODE *pCurrent;
NODE start;
int x =22;
while (1)
{
start.pNext=(NODE *)NULL;
x=15;
start.ptrData = (void *)&x;
pCurrent=&start;
for (x=0; x<2000; x++)
{ AddNode(pCurrent,x);
pCurrent=pCurrent->pNext;
}
Cleanup(&start);
};
}

/*Add Node*/
void AddNode(NODE *ptrParent, int z)
{
NODE *ptrNew;
int *ptrData = (int *) NULL;

/*Allocating memory to ptrNew*/
ptrNew = (NODE *)malloc(sizeof(NODE));
if ((NODE *) NULL == ptrNew)
{
printf("Out of memory! Exiting\n");
exit (1);
}
/*Allocating memory to ptrData. Please let me know why am in getting out of memory error*/
ptrData= (int *) malloc(sizeof(int));
if ((int *) NULL == ptrData)
{
printf("Out of memory! Exiting\n");
exit (1);
}

*ptrData = z;
ptrNew->ptrData = (void *)ptrData;
ptrNew->pNext=(NODE *) NULL;
ptrParent->pNext = ptrNew;
}

void Cleanup(NODE *pStart)
{
if ((NODE *)NULL != pStart->pNext)
{
freeList(pStart->pNext);
}
pStart->pNext=(NODE *)NULL;
*((int *)pStart->ptrData) = 0;
}

void freeList(NODE *pHead)
{ NODE *pNext;
pNext = pHead->pNext;
if (NULL != pHead->pNext)
{
freeList(pNext);
free(pNext);
}
}

最佳答案

如果您在不破坏语法突出显示的情况下正确地编写了您的问题,那么您会更快地得到答案。问题是 AddNode()

 ptrData= (int *) malloc(sizeof(int));
if ((int *) NULL == ptrData)
{
printf("Out of memory! Exiting\n"); exit (1); }
}

将分配 freeList() 中未使用 free() 的内存

要修复此问题,您需要将 freeList() 更改为:

 void freeList(NODE *pHead)
{
NODE *pNext;
pNext = pHead->pNext;
if (NULL != pHead->pNext)
{
freeList(pNext);
free(pNext->ptrData);
free(pNext);
}
}

关于c - 此版本的 C 程序内存不足。有人请告诉我为什么内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22566359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com