8 c c++ memory-management memo
在C/C++编程时,我已经阅读了很多程序员的说法和写作,有很多与内存有关的问题.我打算学习用C/C++编程.我对C/C++有初学者知识,我想看一些简短的示例,说明为什么C/C++会出现内存管理问题.请提供一些样品.
fma*_*ark 16
在C或C++中,有许多方法可以破坏或泄漏内存.这些错误是一些最难诊断的错误,因为它们通常不易重现.
例如,无法释放已分配的内存很简单.例如,这将执行"双重免费",尝试释放a两次并且无法释放b:
char *a = malloc(128*sizeof(char));
char *b = malloc(128*sizeof(char));
b = a;
free(a);
free(b); // will not free the pointer to the original allocated memory.
Run Code Online (Sandbox Code Playgroud)
下面是一个破坏任意内存的缓冲区溢出示例.这是一个缓冲区溢出,因为你不知道有多长str.如果它超过256个字节,那么它会将这些字节写入内存中的某些位置,可能会覆盖您的代码,可能不会.
void somefunc(char *str) {
char buff[256];
strcpy(buff, str);
}
Run Code Online (Sandbox Code Playgroud)
基本上,在这些语言中,您必须手动请求不是编译时已知的本地变量的每一位内存,并且当您不再需要它时必须手动释放它.库(所谓的智能指针)可以在某种程度上自动化这个过程,但它们并不适用于所有地方.此外,对于如何(尝试)通过指针算术访问内存绝对没有限制.
手动内存管理可能会导致许多错误:
其中许多问题很难诊断和调试.
我打算学习用C/C++编程
你到底是什么意思?你想学习用C语言编程,还是想学习用C++编程?我不建议一次学习这两种语言.
从用户的角度来看,C++中的内存管理比在C中容易得多,因为大多数内容都是由类封装的std::vector<T>.从概念的角度来看,C的内存管理可以说得更简单.基本上,只有malloc和free:)
| 归档时间: |
|
| 查看次数: |
924 次 |
| 最近记录: |