赞
踩
2.sizeof返回的这种结构体大小不包括柔性数组的内存——也会内存对齐
3.包含柔性数组成员的结构体用malloc函数进行内存的动态分配,并且分配的内存应该大于结构体的大小,以适应柔性数组的预期大小
- #include <stdio.h>
- struct st_type
- {
- char n;
- int i;
- int a[0];
- };
- int main()
- {
- printf("%zu",sizeof(struct st_type));
- return 0;
- }
- #include <stdio.h>
- #include<stdlib.h>
- typedef struct st
- {
- char n;
- int i;
- int arr[0];
- }st;
- int main()
- {
- int i;
- //初始化
- st* p = (st*)malloc(sizeof(st)+sizeof(int)*10);
- if (p == NULL)
- {
- perror("malloc");
- return 1;
- }
- p->n = 'w';
- p->i = 4;
- //输入
- for (i = 0; i < 10; i++)
- {
- p->arr[i] = i;
- }
- //输出
- printf("增加内存空间前:");
- for (i = 0; i < 10; i++)
- {
- printf("%d ",p->arr[i]);
- }
- printf("%c %d",p->n,p->i);
- printf("\n");
- //数组空间不够,增加内存
- st* str = (st*)realloc(p,sizeof(st) + sizeof(int)*15);
- if (str == NULL)
- {
- perror("realloc");
- return 1;
- }
- //继续使用
- //输入
- for (i = 10; i < 15; i++)
- {
- p->arr[i] = i;
- }
- //输出
- printf("增加内存空间后:");
- for (i = 0; i < 15; i++)
- {
- printf("%d ", p->arr[i]);
- }
- printf("%c %d", p->n, p->i);
- free(p);
- p = NULL;
- return 0;
- }
- #include <stdio.h>
- #include<stdlib.h>
- typedef struct st
- {
- char n;
- int i;
- int* arr;
- }st;
- int main()
- {
- //在堆区申请结构体
- st* p = (st*)malloc(sizeof(st));
- if (p == NULL)
- {
- perror("malloc");
- return 1;
- }
- //堆区申请数组内存
- p->arr = (int*)malloc(sizeof(int)*10);
- if (p->arr == NULL)
- {
- perror("malloc");
- return 1;
- }
- //初始化
- int i;
- for (i = 0; i < 10; i++)
- {
- p->arr[i] = i;
- }
- //内存空间不够
- int* ps = (int*)realloc(p->arr,sizeof(int)*15);
- if (ps == NULL)
- {
- perror("realloc");
- return 1;
- }
- p->arr = ps;
- for (i = 10; i < 15; i++)
- {
- p->arr[i] = i;
- }
- for (i = 0; i < 15; i++)
- {
- printf("%d ",p->arr[i]);
- }
- //释放堆区上的数组内存
- free(p->arr);
- p->arr = NULL;
- //释放堆区上的结构体内存
- free(p);
- p = NULL;
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。