zl程序教程

您现在的位置是:首页 >  后端

当前栏目

完美解析C语言(char*)malloc(x*sizeof(char))

C语言 解析 完美 char malloc sizeof
2023-09-14 09:09:14 时间
(char*malloc(x*sizeof(char))

假设x=8,那么就是申请了8个连续的字节,当然就有8个连续的地址了,但是返回的是首地址。因为空间是连续的,所以可以通过首地址计算其他地址。
比如

char *p=(char *)malloc(8*sizeof(char));

p就指向一个有8个连续空间的首地址,p+1就是第二个空间的地址。简单总结就是申请空间,有多少空间就有多少地址。
此外,一个sizeof(char)表示一个字节的空间,乘以8,表示8个字节空间,在堆(heap)上开辟8个char的连续地址的空间。所以是8个char的地址.

案例分析:被调函数给结构体分配内存
当结构体的内存在被调函数中分配时,要将其传出,有两种方法使用return传出

Man *createMan(int num)
{
    Man *tArray = NULL;
	tArray = (Man *)malloc(num * sizeof(Man));
	if (tArray == NULL)
	{
		return NULL;
	}
	return tArray;
}

使用二级指针传出

int createMan(Man **tArray, int num)
{
	(*tArray) = (Man *)malloc(num * sizeof(Man));
	if (tArray == NULL)
	{
		return -1;
	}
	return 0;
}
createMan(&Man1, 3);

参考文献:C/C++ 的思考:int a[10] 和 int *a = malloc(10 * sizeof(int)) 的区别

参考文献:C语言malloc申请内存不释放的后果
参考文献:C语言 分配内存不回收的后果

参考文献:C语言malloc不释放可以吗?因为申请的内存要在整个程序周期运行?