当使用malloc函数或者realloc申请空间字节大小操作不当时,使用free释放空间会出现以下错误,
原因:开辟空间大小没有写入正确,而c语言中存在内存对齐,就是CPU访问内存时并不是挨个字节访问的,而是根据类型的字节长度访问的,比如32位的CPU,字长为4个字节,则CPU访问内存的单位也是4字节。
例如:
这里我StackType的类型是int,EXTEND值为2,st->capacity值为4,这样相当于开辟了18个字节的空间,并不为int*(也就是StackType*)类型大小的倍数,与 这里我的StackType*类型并不匹配,CPU根据内存对齐的原理进行的访问会访问到未知空间,是不合理的空间开辟,所以free的时候就会报错。
malloc函数也是一样的道理,不能出现以上不正常的开辟空间,同样会造成报错
解决办法:开辟的空间字节大小要和类型匹配,比如你int类型的就要开辟4的倍数
这样我改过之后的开辟的空间就是24个字节了,与我的StackType*匹配,这样问题就解决了