您的位置:首页 > 编程语言 > C语言/C++

C++编程中常见的线程和内存问题

2017-11-01 18:31 162 查看
最近在梳理一些的知识,这儿汇总一下C++中经常遇到的线程和内存问题,以便后续注意。

线程问题:丢失更新、脏读、死锁等

避免多线程使用线程不安全的函数

避免多线程读写的数据不加锁保护

避免相互调用的函数加成同一把锁造成死锁

内存问题:覆盖、溢出、非法等

● 使用未初始化的内存

全局变量和局部变量初始值为0,而局部变量和动态申请的变量,初始值随机。如果程序使用了随机值的变量,那么程序结果也就可能莫名其妙。

● 非法指针

包括空指针或随意使用指针转换

● 内存读写越界

内存越界是指访问了没有权限访问的内存地址空间。比如对访问数组时越界、对动态内存访问超出申请内存大小等。

● 内存覆盖

C和C++强大之处就是可以直接操作内存,但是一旦内存区域发生重叠,就会导致程序发生不可预期的结果。

● 动态内存管理错误

内存分配方式:静态存储、栈上内存、堆上分配

○ 申请和释放不一致

比如用new申请的,用free释放

○ 申请和释放不匹配

申请了多少内存,就要释放多少内存。如果没有释放就是内存泄露,如果释放多次也会发生问题。

○ 释放后仍然读写

动态内存链表中,内存被释放,那就可能分配给其他部分使用,如果内存释放后再访问,就可能覆盖其他部分的内存,从而导致不可预期的错误。

● 内存泄露

是指在程序动态申请的内存,使用完后既没有被释放,又无法被程序其他部分访问。内存泄露是开发大型程序最头痛的问题,关键是要养成良好的编程习惯。

● 堆栈溢出

不要使用大的局部变量(栈大小是固定,比如8M),这样容易造成堆栈溢出,导致莫名其妙的错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 基础知识