c动态内存管理拾遗

c语言核心技术,这本书非常好!以下是书中整理,也留给自己日后翻看。

malloc(),calloc() :分配新的内存区域。

void *malloc(size_t size) :分配连续内存区域,大小不小于size字节,但新分配内存区域的内容未确定。

void *calloc(size_t count, size_t size) : 分配不少于count*size大小的内存区域,而且将内存中每个字节都初始化为0.

返回值为分配内存区域第一个字节的地址。分配的内存区会一直存在,除非调用free()或realloc()释放内存。

void *realloc(void *ptr, size_t size) :调整以前分配的内存区域。释放ptr所指区域,并分配一个size字节内存区域,返回首地址,并将旧内存区内容复制到新的内存区中。若分配失败,它不会改变原内存区域。

void free(void *ptr) :释放以前分配区域。

范例:

char *getline(unsigned int len_max)
{
	char *linPtr = malloc( len_max + 1);
	if (linPtr != NULL)
	{
		int c = EOF;
		unsigned int i = 0;
		while ( i < len_max && ((c = getchar()) != '\n' && c != EOF))
			linPtr[i++] = (char)c;
		linPtr[i] != '\0';
		if (c == EOF && i == 0)
		{
			free(linPtr);
			linPtr = NULL;
		}
		else
			linPtr = realloc(linPtr, i + 1);
	}
	return linPtr;
}
posted @ 2012-07-18 20:49  xxx1  阅读(244)  评论(0编辑  收藏  举报