整理了一些有关内存管理测试题
类型一
1.
#define BUFFER_SIZE 256
void GetMemory(char **ppszbuf)
{
if (NULL == ppszbuf)
{
assert(0);
return 0;
}
ppszbuf = (char *)malloc(BUFFER_SIZE);
//*ppszbuf = (char *)malloc(BUFFER_SIZE);
}
int main()
{
char *pszbuf = NULL;
GetMemory(&pszbuf);
strcpy(pszbuf, "hello world!\n");
printf("%s", pszbuf);
free(pszbuf);
system("pause");
return 0;
}
这道题有两个错误:
错误1:pszbuf并没有接收到申请空间的地址,所以给一个空指针拷贝字符串出错
错误2:申请的空间地址被ppszbuf保存,当函数调用结束后,该形参被释放,所以该空间的地址无法再被获取,即会出现内存泄露
如何改正:*ppszbuf = (char )malloc(BUFFER_SIZE);