2021.6.9
EXE File英文全名executable(a.可执行的) file
bss区:block started by symbol,以符号开始的块
heap segment(段):堆
栈区存储数据,在内存中,从高地址存向低地址
数组例外,在高地址一端开辟空间后,arr[0]-arr[n]从低地址往高地址存储
函数参数,从右往左加载入栈,先入栈的右端参数,先存入高地址
加载:表示启动程序时文件或信息的载入。
如何避免野指针的出现:在free(p)后,令p=NULL,避免后面乱使用野指针
C语言中,实数类型=浮点数类型
-malloc:memory allocation(n.分配),动态内存分配
-void *calloc(unsigned int num,unsigned int size):(contiguous(连续的) memory allocation)
num(对象个数),size(对象占据的内存字节数)
在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。
相较于malloc函数,calloc函数会自动将内存初始化为0。而malloc不做初始化,分配到空间中的数据是随机数据。
-void *realloc(void *mem_address,unsigned int newsize): (reallocate v.重新分配)
判断是否有足够大的连续空间,有则开辟并返回原指针;如空间不够,则另开辟一块并拷贝,而后释放之前指针所指的内存区域,并返回新指针
注意事项:
1. 不free()会造成内存泄漏。
2. newsize小于原先的大小的时候,可能会造成数据丢失。
4. 如果newsize大小为0,那么释放mem_address指向的内存,并返回NULL。这里需要注意的是只对指针本身进行释放,例如对二维指针**a,对a调用realloc时只会释放一维,使用时谨防内存泄漏(没free到,失去了对某段内存的控制)。
5.如果没有足够可用的内存用来完成重新分配(扩大原来的内存块,或分配新的内存块),则返回NULL。而原来的内存块保持不变。
6.传递给realloc的指针可以为空,效果等同于malloc。
指针变量,++、--,改变的是指针指向的位置,向右偏移、向左偏移
memset(void *s, int c, size_t n):可用于栈区、堆区
s需操作内存的首地址,c(0-255)每个字节都改成c,总共该n个字节。
2021.6.10
开辟堆空间后,用多了,在释放的时候,会报错
堆空间不能多次释放,因为第2次释放的是野指针,为了避免野指针出现,可对指针赋值为NULL(空指针),因为空指针不但可以释放,还可以多次释放
无法打开XXX.exe进行写入——关闭重启VS;或在任务管理器关闭XXX.exe进程
值传递(形参是复制品,无法改变实参)与地址传递(改变了实参)
同级别(EG:一级指针和一级指针),为值传递
system("cls"),clear(v. 清除) screen