1.new
1)分配一个整型变量的动态内存
有两种方式
#include<stdio.h>
#inlcude<stdlib.h>
int main(void) {
int num = 0;
int *salary = NULL;
//salary = new int(666);//第一种 直接赋值,这次赋的值为668
salary = new int;//第二种 先分配,
*salary = 666;//再赋值
printf("salary:%d\n", *salary);
delete salary;//释放
system("pause");
return 0;
}
2)分配多个整型变量的动态内存
#include<stdio.h>
#inlcude<stdlib.h>
int main(void) {
int num = 0;
int *salary = NULL;
printf("请输入需要雇佣的农民的数量:");
scanf_s("%d", &num);
if(num <= 0) {//防御性编程
while(1) {
printf("输入错误,请重新输入:");
scanf_s("%d", &num);
if(num > 0) {
break;
}
}
}
salary = new int[num];//分配多个整型变量的动态内存
for(int i=0; i<num; i++) {
*(salary + i) = i + 1;
}
for(int i=0; i<num; i++) {
printf("第%d个农民的薪资:%d\n", i+1, salary[i]);
}
printf("------over-------\n");
delete[] salary;
/*
如果不进行delete,那么这些动态内存,会一直存放在堆区,存放过多,
空间就会不够,程序就会挂掉,这是内存泄漏。
不进行delete,这些动态内存直到main函数的结尾(也就是return 0)之后才会释放掉
*/
//delete之后的内存, 禁止访问
for(int i=0; i<num; i++) {//打印的值为随机值
printf("第%d个农民的薪资:%d\n", i+1, salary[i]);
}
system("pause");
return 0;
}
动态内存存储在内存中的堆区,随用随取,用完就是释放掉。
用完一定要释放掉,不然会发生内存泄漏:
如果不进行delete,那么这些动态内存,会一直存放在堆区,存放过多,空间就会不够,程序就会挂掉,这是内存泄漏。
不进行delete,这些动态内存直到main函数的结尾(也就是return 0)之后才会释放掉
2.malloc
在c语言中进行分配动态内存的函数,c++也兼容
void *malloc(size_t size);
void free(void *);
malloc 在内存的动态存储区中分配一块长度为 size 字节的连续区域返回该区域的首地址
#include<stdio.h>
#include<stdlib.h>
int *demo(int count) {
int *ap = NULL;
//分配以ap为起始地址的count个int类型的动态内存
ap = (int *)malloc(sizeof(int) * count);//c语言中分配动态内存的函数malloc
for(int i=0; i<count; i++) {
*(ap+i) = 100 + i;
}
return ap;
}
int *pointer = NULL;
int count = 0;
scanf_s("%d", &count);
//通过函数返回一个动态内存起始地址
pointer = demo(count);
for(int i=0; i<count; i++) {
printf("*(pointer+%d) = %d\n", i, *(pointer+i));
}
//用完之后,释放动态内存
free(pointer);//c语言中释放内存的函数
system("pause");
return 0;
}
注意:推荐使用new,delete,因为这不是函数,是运算符,执行效率更高。而malloc,free本身是函数。