美文网首页
C&C++常用方法笔记 -内存的开辟

C&C++常用方法笔记 -内存的开辟

作者: 月影路西法 | 来源:发表于2019-05-05 14:14 被阅读0次

先推荐一个网站 http://en.cppreference.com/w/c

这个网站可以在线查询C的一些api

内存的开辟需要3个函数

malloc 动态开辟内存

free 释放内存

realloc

1.静态内存的开辟

void staticlloc(){

int arr[5];// 静态开辟 0.8M

int i = 0;

for (; i < 5; i++)

{

arr[i] = i;

printf("%d, %p\n", *(arr + i), arr + i);

}

}

2.动态内存开辟

void dynamiclloc(){

int* arr = (int*)malloc(1 * 1024 * 1024 * sizeof(int)); // 40M

// 第二个重要的方法,手动释放 free , 释放arr这一块内存

free(arr); 

}

使用场景

void main(){

// 假设我们现在需要接收用户所输入的数,然后进行排序

int num;

printf("请输入数的个数:");

// 获取用户输入的值

scanf_s("%d",&num);

// 定义一个数组来存放用户的数据

// int arr[num]; 静态开辟,内存大小不能改变

int* arr = (int*)malloc(sizeof(int)*num);

// for 循环接收

int i = 0;

int print_num;

for (; i < num;i++){

printf("请输入第%d个的值:",i);

scanf_s("%d", &print_num);

arr[i] = print_num;// arr[i] = *(arr+i)

printf("%d, %p\n", *(arr + i), arr + i);

}

// 排序 堆排序(4个小时),快排序

free(arr);

getchar();

}

// 改变内存空间大小

void main(){

int num;

printf("请输入数的个数:");

// 获取用户输入的值

scanf_s("%d", &num);

// 5 个值

int* arr = (int*)malloc(sizeof(int)*num);

int i = 0;

int print_num;

for (; i < num; i++){

arr[i] = i;// arr[i] = *(arr+i)

}

printf("开辟内存的指针:%p\n",arr);

// 再加点内存

printf("请输入新增的个数:");

// 获取用户输入的值

int new_num;

scanf_s("%d", &new_num);// 5

// 原来那块内存的指针,总的大小(原来的大小+新的大小)

int* new_arr = (int*)realloc(arr, sizeof(int)*(num+new_num));

if (new_arr){// = if(new_arr != NULL)

i = new_num;

for (; i < (num + new_num); i++){

arr[i] = i;// arr[i] = *(arr+i)

}

printf("新开辟内存的指针:%p\n", new_arr);

// 打印数组

i = 0;

for (; i < num + new_num; i++){

printf("%d, %p\n", *(arr + i), arr + i);

}

}

if (new_arr){

// 如果成功了,只要释放新的地址就行

free(new_arr);

new_arr = NULL;

}

else{

// 如果没有成功,释放原来的内存

free(arr);

}

// 不要反复去释放,那块地址一旦被释放,就有可能会被新的应用占用,不要去再次释放

// free(new_arr);

// 工作 C/C++ 精通

getchar();

}

相关文章

网友评论

      本文标题:C&C++常用方法笔记 -内存的开辟

      本文链接:https://www.haomeiwen.com/subject/isncoqtx.html