首页 > > > malloc free面试题
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "malloc.h"
#include "string.h"
void GetMemory(char **p, int num)
{
*p = (char *)malloc(num);
}
int main()
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
free(str);
if (str != NULL)
{
strcpy(str, "world");
}
printf("\n str is %s", str);
getchar();
}
好久没有写文章了,刚开始做的 c 语言专栏有点安静,今天来一个笔试题目,看看这个题目的输出。
其中有一个比较关键点的事,free(str) 调用了,后面还是使用了 strcpy 给这个地方赋值,so,输出结果就比较让大家奇怪。
先看看malloc和free的作用
void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。
关于分配失败的原因,应该有多种,比如说空间不足就是一种。
void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。
free()释放的是指针指向的内存!注意!释放的是内存,不是指针!指针并没有被释放,指针仍然指向原来的存储空间。指针是一个变量,只有程序结束时才被销毁。释放了内存空间后,原来指向这块空间的指针还是存在!只不过现在指针指向的内容的垃圾,是未定义的,所以说是垃圾。因此,释放内存后把指针指向NULL,防止指针在后面不小心又被解引用了。
从上面得解释就不难知道,free,让这个内从让下次 malloc 可以继续使用,但是 str 还是指向了这片内存,所以在 free 的时候需要
if (str != NULL)
{
free(str);
str = NULL;
}解释完后应该知道程序输出什么了吧?

原文作者:;如有侵权,请联系管理员删除。