ITPub博客

首页 > > > malloc free面试题

malloc free面试题

作者:dapan 时间:2019-03-25 11:58:33 0 删除 编辑
// 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,输出结果就比较让大家奇怪。

1

先看看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;
	}

2

解释完后应该知道程序输出什么了吧?

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

请登录后发表评论 登录
全部评论

注册时间:2020-08-07

  • 博文量
    4504
  • 访问量
    87219