动态内存管理之柔性数组

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

//C99中,结构中最后一个元素允许是未知大小的数组,这就叫做柔性数组成员

//

//typedef struct

//{

// int n;

// int arr[0];//这里的a就是柔性数组成员

//}type_a;

//int main()

//{

// //柔性数组的特点

// // 计算结构体大小时,只计算柔性数组前的成员的大小

// //

// int sz = sizeof(type_a);

// printf("%d", sz);

// //包含柔性数组的结构体,应使用malloc去开辟内存空间,并且开辟空间的大小要大于柔性数组的大小

// //柔性数组的使用

// type_a* ps = (type_a*)malloc(sizeof(type_a)+40);

// //其他成员的大小,以及给柔性数组成员的空间

// if (ps == NULL)

// {

// return 1;

// }

// ps -> n = 100;

// int i = 0;

// for (i = 0;i < 10;i++)

// {

// ps->arr[i] = i;

// }

// for (i = 0;i < 10;i++)

// {

// printf("%d ", ps -> arr[i]);

// }

// type_a* ptr = (type_a*)realloc(ps, 80);

// if (ptr != NULL)

// {

// ps = ptr;

// ptr = NULL;

// }

// free(ps);

// ps = NULL;

// return 0;

//}

struct S

{

int n;

int* arr;

};

int main()

{

struct S* ps = (struct S*)malloc(40);

if (ps == NULL)

{

return 1;

}

ps->n = 100;

ps->arr = (int*)malloc(40);

if (ps->arr == NULL)

{

return 1;

}

//使用

int i = 0;

for (i = 0;i < 10; i++)

{

ps->arr[i] = i;

printf("%d", ps->arr[i]);

}

//扩容

int* ptr = (int*)realloc(ps -> arr, 100);

if (ptr == NULL)

{

return 1;

}

//释放

free(ps ->arr);

free(ps);

ps = NULL;

return 0;

}

//使用柔性数组,则内存使用连续,读写速度更快

//malloc次数越多,形成内存碎片的几率越大

相关推荐
数据大魔方26 分钟前
【期货量化实战】螺纹钢量化交易指南:品种特性与策略实战(TqSdk完整方案)
python·算法·github·程序员创富·期货程序化·期货量化·交易策略实战
豆沙沙包?26 分钟前
2026年--Lc334-2130. 链表最大孪生和(链表转数组)--java版
java·数据结构·链表
千金裘换酒1 小时前
LeetCode 删除链表的倒数第N个结点
算法·leetcode
SweetCode1 小时前
【无标题】
开发语言·c++·算法
shughui1 小时前
Python基础面试题:语言定位+数据类型+核心操作+算法实战(含代码实例)
开发语言·python·算法
王老师青少年编程1 小时前
信奥赛C++提高组csp-s之拓扑排序详解
c++·算法·拓扑排序·csp·信奥赛·csp-s·提高组
kaikaile19952 小时前
matlab计算流场
人工智能·算法·matlab
3GPP仿真实验室2 小时前
【Python源码】6G:PyTorch OFDM 教学仿真平台
算法
xie_pin_an2 小时前
C++ 从入门到进阶:核心知识与实战指南
java·c++·算法
Python_Study20252 小时前
制造业数据采集系统选型指南:从技术挑战到架构实践
大数据·网络·数据结构·人工智能·架构