动态内存管理之柔性数组

#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次数越多,形成内存碎片的几率越大

相关推荐
艾莉丝努力练剑8 分钟前
【C语言16天强化训练】从基础入门到进阶:Day 1
c语言·开发语言·数据结构·学习
亲爱的非洲野猪9 分钟前
令牌桶(Token Bucket)和漏桶(Leaky Bucket)细节对比
网络·算法·限流·服务
NAGNIP23 分钟前
一文读懂LLAMA
算法
烧冻鸡翅QAQ25 分钟前
62.不同路径
算法·动态规划
番薯大佬26 分钟前
编程算法实例-冒泡排序
数据结构·算法·排序算法
queenlll28 分钟前
P2404 自然数的拆分问题(典型的dfs)
算法·深度优先
wydaicls29 分钟前
用函数实现方程函数解题
人工智能·算法·机器学习
·白小白30 分钟前
力扣(LeetCode) ——100. 相同的树(C语言)
c语言·算法·leetcode
CoovallyAIHub1 小时前
为什么85%的企业AI项目都失败了?
深度学习·算法·计算机视觉
ankleless1 小时前
数据结构(03)——线性表(顺序存储和链式存储)
数据结构·考研·链表·顺序表·线性表