c语言——结构体嵌套一级指针

48 篇文章 4 订阅

c语言——结构体嵌套一级指针

这里用支了二级指针

void test()
{
	struct Person **person = NULL;
	person = allocateSpace();//分配内存
	printPerson(person);//打印Person数组
	freeSpace(person);//释放内存
	person = NULL;//置空,防止野指针
}

运行

Name:Name_1 Age:100
Name:Name_2 Age:101
Name:Name_3 Age:102
Name:Name_1的内存被释放!
Name:Name_2的内存被释放!
Name:Name_3的内存被释放!

原理

在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct Person
{
	char *name;
	int age;
};

//分配内存
struct Person** allocateSpace()
{
	struct Person **temp = malloc(sizeof(struct Person *) * 3);

	for (int i = 0; i < 3; ++i)
	{
		temp[i] = malloc(sizeof(struct Person));

		temp[i]->name = malloc(sizeof(char)* 64);

		sprintf(temp[i]->name, "Name_%d", i + 1);

		temp[i]->age = 100 + i;
	}


	return temp;
}

//打印
void printPerson(struct Person **person)
{
	if (NULL == person)
	{
		return;
	}

	for (int i = 0; i < 3; ++i)
	{
		printf("Name:%s Age:%d\n",person[i]->name,person[i]->age);
	}
}

//释放内存
void freeSpace(struct Person **person)
{

	if (NULL == person)
	{
		return;
	}

	for (int i = 0; i < 3; ++i)
	{
		if (person[i] == NULL)
		{
			continue;
		}

		if (person[i]->name != NULL)
		{
			printf("Name:%s的内存被释放!\n", person[i]->name);
			free(person[i]->name);
			person[i]->name = NULL;
		}

		
		free(person[i]);
		person[i] = NULL;
	}

	free(person);
	person = NULL;
}

void test()
{
	struct Person **person = NULL;
	person = allocateSpace();
	printPerson(person);
	freeSpace(person);
	person = NULL;
}

int main(){

	test();

	system("pause");
	return EXIT_SUCCESS;
}

其他

c语言——结构体嵌套二级指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值