笔记:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <cstring>
#include <cerrno>
// 柔性数组
struct S
{
int n; // 4个字节
int arr[];
};
int main()
{
//int sz = sizeof(struct S);
//std::cout << sz << std::endl; // 4 , 没有算后面成员的大小
// 柔性数组的使用
// 假设我们要给S 的arr成员变量开辟10个长度,需要int的size + arr的size
struct S* p = (struct S*)malloc(sizeof(struct S) + 40);
if (p == NULL)
{
std::cerr << strerror(errno) << std::endl;
return 1;
}
p->n = 100;
for (int i = 0; i < 10; i++)
{
p->arr[i] = i;
}
for (int i = 0; i < 10; i++)
{
std::cout << p->arr[i] << std::endl;
}
// 扩容/给新的大小
struct S* ptr = (struct S*)realloc(p, sizeof(struct S) + 80);
if (ptr != NULL)
{
p = ptr;
}
for (int i = 0; i < 20; i++)
{
p->arr[i] = i;
}
for (int i = 0; i < 20; i++)
{
std::cout << p->arr[i] << std::endl;
}
std::cout << p->n << std::endl;
// 释放
free(p);
p = NULL;
return 0;
}
// 柔性数组 成员是指针malloc越多越容易出错
struct S {
int n;
int* arr;
};
int main ()
{
struct S* p = (struct S*)malloc(sizeof(struct S));
if (p == NULL)
{
return 1;
}
p->n = 100;
p->arr = (int*)malloc(40);
if (p->arr == NULL)
{
std::cerr << strerror(errno) << std::endl;
return 1;
}
for (int i = 0; i < 10; i++)
{
p->arr[i] = i + 1;
; }
for (int i = 0; i < 10; i++)
{
std::cout << p->arr[i] << std::endl;
}
// 如果需要扩容
//int* ptr = (int*)realloc(p->arr, 80);
//if (ptr == NULL)
//{
// return 1;
//}
使用
// 需要先释放malloc创建出来的内存
free(p->arr);
free(p);
p = NULL;
return 0;
}