我们可以先了解一下动态内存分配
成都创新互联公司认为,企业网站是要赋予品质、思维、人性,深入到用户内心的细腻情感,才能真正称得上企业网站。成都创新互联公司根据每位用户内心最深的需求网站建设服务,坚实的设计执行是品牌长期视觉塑造的重要支持。void* malloc (size_t size);
void* calloc (size_t num, size_t size);
void* realloc (void* ptr, size_t size);
void free (void* ptr);
一些常错点,避免写的时候出错
柔性数组(与本次用到的办法有点差异)
针对静态版的库函数进行改进
void* malloc (size_t size);
size_t size |
---|
总开辟空间字节个数 |
void* calloc (size_t num, size_t size);
size_t num | size_t size |
---|---|
元素个数 | 单个元素开辟空间字节个数 |
void free (void* ptr);
void* ptr |
---|
开辟了的空间的首地址 |
#include#include#includeint main()
{int* ptr1 = (int*)malloc(4);
//这里必须强制类型转化为int*
int* ptr2 = (int*)calloc(10,4);
//这里相当于定义了一个int[10]的数组,只不过地址给了ptr2
if(ptr1 && ptr2)
{perror("开辟空间时"); //错误原因
return 1;
}
free(ptr1);
free(ptr2);
ptr1 = NULL; ptr2 = NULL;
//释放,并且把置为空指针,以免使用导致越界访问
return 0;
}
2.2 reallocvoid* realloc (void* ptr, size_t size);
void* ptr | size_t size |
---|---|
开辟了的空间首地址 | 改变后的总大小(不要乱搞) |
struct stu
{ int i;
char ch;
int arr[]; //只能是放在最后这个才算数,并且上面至少定义一个成员
}
struct stu
{int i;
char* str;
}
预告:可保存版通讯录
struct contact_list
{//struct content list[MAX+1];
struct content* list; //并不是柔性数组的方法
int sz;
int capacity;
};
改动二:void init(struct contact_list* pt)
{assert(pt);
pt->sz = 0;
// memset(pt->list, 0, (MAX + 1) * sizeof(struct content));
struct content* ptr = (struct content*)malloc(NUM * sizeof(struct content));
if (ptr == NULL)
{printf("init:%s", strerror(errno));
return;
}
else
{pt->list = ptr;
pt->capacity = NUM;
}
}
改动三:void add_man(struct contact_list* pt)
{printf("请输入你要添加人的信息(重名者需要加上编号):>\n");
printf("姓名:>");
scanf("%s", pt->list[pt->sz].name);
printf("性别:>");
scanf("%s", pt->list[pt->sz].sex);
printf("地址:>");
scanf("%s", pt->list[pt->sz].address);
printf("手机号:>");
scanf("%s", pt->list[pt->sz].phone);
printf("年龄:>");
scanf("%d", &pt->list[pt->sz].age);
pt->sz++;
system("cls");
printf("添加成功\n");
if (pt->sz == pt->capacity)
{struct content* ptr = (struct content*)realloc(pt->list, (pt->capacity + 2) * sizeof(struct content));
if (ptr == NULL)
{ perror("add_man");
return;
}
else
{ pt->list = ptr;
pt->capacity += 2; //***
}
}
}
文章到此结束!谢谢观看 —>内容参考【比特科技】
可以叫我小马,我可能写的不好或者有错误,但是一起加油鸭🦆!这是我的代码仓库!(在马拉圈的22.12里)代码仓库
邮箱:2040484356@qq.com
动态内存申请的空间,一般由低地址往高地址申请,这也很好理解,因为如果由高到低的话,realloc的时候,每次申请空间的首地址都要变↩︎
因为指针的解引用也可以用下标访问,((p+i) = p[i])↩︎
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款