动态数组函数 malloc
程序员成长之旅 · 程序员成长之旅/C语言/笔记 · 451 字
以前 我们创建的数组通常都是"静态数组" 即 给定一个固定大小
有的时候 我们无法在编写程序的时候预知用户输入多少数据 定义多了就浪费,定义少了又不够
这个时候我们就需要动态数组帮助我们解决问题
要注意的是 这个函数如果用不好 很危险
因为静态数组会随着使用被系统自动释放内存
而动态数组 是全局的 若不手动释放就会随着时间造成程序缓慢 最终造成宕机 (这种情况称之为 "内存泄漏")
随意我们还需要配合函数 free 来释放不需要的内存
#include<stdlib.h>
//语法
//arr为指针类型 int* arr;
arr=malloc(sizeof(变量类型)*所需的空间大小);//因为malloc是以最小的单位字节为单位 所以需要手动计算
//一般来说 若内存申请失败 就需要进行异常操作 所以malloc一般配合if使用
if((arr=malloc(sizeof(变量类型)*所需的空间大小))==NULL)
return -1;
//free函数
free(arr);
arr=NULL;//防止出现野指针
#include<stdio.h>
#include<stdlib.h>
int size=0;
int lenght=0;
int* data;
int* strArr(void)
{
if((data=(int*)malloc(sizeof(int)*10))==NULL){
return -1;
}
lenght=10;
return data;
}
int resize(int newCapacity)
{
int* newArr;
if((newArr=(int*)malloc(sizeof(int)*newCapacity))==NULL){
return -1;
}
for(int i=0;i<lenght;i++){
newArr[i]=data[i];
}
free(data);
data=newArr;
newArr=NULL;
lenght=newCapacity;
}
void addArr(int index,int newData)
{
if(index<0||index>size){
return 233;
}
if(size==lenght){
resize(lenght*2);
}
for(int i=size-1;i>=index;i++){
data[i+1]=data[i];
}
data[index]=newData;
size++;
}
void printAll(void)
{
printf("The size is [%d],lenght is[%d]\n",size,lenght);
for(int i=0;i<size;i++){
printf("[%d]\t",data[i]);
if(i%10==0){
printf("\n");
}
}
}
int main()
{
strArr();
for(int i=0;i<300;i++) {
addArr(i,i);
}
printAll();
}