c++ - 为什么 C/C++ 有内存问题?

标签 c++ c memory-management memo

我读过很多程序员在用 C/C++ 编程时说和写有很多与内存相关的问题。我打算学习用 C/C++ 编程。我有 C/C++ 的初学者知识,我想看一些简短的示例,为什么 C/C++ 会出现内存管理问题。请提供一些 sample 。

最佳答案

在 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.

下面是一个缓冲区溢出示例,它破坏了任意内存。这是缓冲区溢出,因为您不知道 str 有多长。如果它超过 256 字节,那么它会将这些字节写入内存中的某处,可能会覆盖您的代码,也可能不会。

void somefunc(char *str) {
    char buff[256];
    strcpy(buff, str);
}

关于c++ - 为什么 C/C++ 有内存问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2979392/

相关文章:

c++ - stack、queue、priority_queue如何转换?

c - 是否可以将现有缓冲区映射到新文件?

我们可以在一个 while(1) 循环中使用两个 break 语句吗?

c - 从文件中读取以逗号分隔的 "quoted"字符串

objective-c - 为什么这会造成内存泄漏(iPhone)?

linux - 与虚拟内存相比,为什么我的进程占用更高的驻留内存?

c++ - 在 Qt 5.5 中持续检查主循环

c++ - 如何做出健壮的断言?

c++ - 防止通过程序自动锁定Windows(不更改任何系统设置)

c - 将参数从shell脚本传递到c程序