常见内存错误
1. 内存泄露。
2. 内存越界访问。
3. 野指针。
4. 访问空指针。
5. 引用未初始化的变量。
6. 不清楚指针运算。
7. 结构的成员顺序变化引发的错误。
8. 结构的大小变化引发的错误。
struct base
{
int n;
};
struct s
{
struct base b;
int m;
};
9. 分配/释放不配对。
10. 返回指向临时变量的指针。
11. 试图修改常量。
12. 误解传值与传引用。
13. 重名符号。
14. 栈溢出。
在一些嵌入式中,线程的栈空间可能只5K大小,甚至小到只有256个字节。在这样的平台中,栈溢出是最常用的错误之一。在编程时应该清楚自己平台的限制,避免栈溢出的可能。
15. 误用sizeof。
尽管C/C++通常是按值传递参数,而数组则是例外,在传递数组参数时,数组退化为指针(即按引用传递),用sizeof是无法取得数组的大小的。
16. 字节对齐。
17. 字节顺序。
最常见的字节顺序有两种:大端模式与小端模式。
大端模式是高位字节数据存放在低地址处,低位字节数据存放在高地址处。
小端模式指低位字节数据存放在内存低地址处,高位字节数据存放在内存高地址处;
18. 多线程共享变量没有用valotile修饰。
在关于全局内存的一节中,我们讲了valotile的作用,它告诉编译器,不要把变量优化到寄存器中。在开发多线程并发的软件时,如果这些线程共享一些全局变量,这些全局变量最好用valotile修饰。这样可以避免因为编译器优化而引起的错误,这样的错误非常难查