c++ - 为什么我可以使用比分配更多的内存?
问题描述
我在搞乱 memset 函数并这样做了:
int* p = malloc(sizeof(int);
memset(p, 0, 10000);
我想知道为什么这是有效的。我只分配了 5 个字节的内存,但我可以使用 memset 占用 10000 个字节。如果我可以占用超过分配的内存,我为什么还要 malloc 内存?有人可以解释一下吗?
解决方案
这是未定义的行为,因为您可以这样做,但结果未定义,因为不可预测,因为程序可能会崩溃。
在这种情况下,您只能写入分配的区域,或sizeof(int) * 5
.
为什么C不阻止你这样做?这是因为语言设计理念是程序员知道他们在做什么并且不妨碍他们。
推荐阅读
- c# - WebAPI 过滤器的 ActionExecutedContext 中的异常属性为空
- intellij-idea - Intellij 有办法在 Kotlin 中生成构建器类吗?
- haskell - 字符串的 Haskell 函数头作为函数的输入
- c# - 在 Open Id Connect 事件期间提示用户提供其他信息?
- php - PHP:如何更改依赖于另一个变量的变量?(新手的东西)
- puppet - 应用 puppetdb 模块时遇到问题
- elasticsearch - 在 ElasticSearch 中按多个字段搜索确切的短语
- android - 如何使用 MediaColumns#IS_PENDING 将 Base64 编码的图像保存到图库
- doctrine-orm - 月代中的学说2实体编号
- python - 将列表拆分为 X 个大小均匀的块?