c - 使用 malloc 时堆与堆栈内存
问题描述
在以下代码中:
int main(void)
{
char* a = malloc(sizeof(char));
a[0] = 'a';
a[1] = 'b';
a[2] = 'c';
printf("%s", a);
}
会计。对我来说,a[0] 正在从堆中分配内存,而 a[1] 和 a[2] 在堆栈上。我得到以下代码的输出abc。这是怎么发生的,如果堆栈和堆应该是两个不同的内存段,我必须只得到一个作为输出,因为我在堆中只为一个字符分配了内存。
解决方案
你只是在堆上为一个char
in分配空间a
,但你正在写三个。另外两个不会神奇地进入堆栈。他们只是覆盖了其他一些可能很重要的值,这些值恰好在你分配的那个值之后。你的程序很简单,不会在你的脸上爆炸,但它仍然是未定义的行为来做到这一点。C 没有边界检查,所以它不会让你免于这个错误。
推荐阅读
- count - 如果事件发生,更新运行列表
- wpf - 使用 ScrollViewer 加载 2 个 DataGrids + StackPanel 时间太长,替代方案?
- windows - RemoteApp Web 客户端:命令行参数
- json - 数据库模型自定义 JSONField 值在测试用例之间持续存在
- flutter - 如何在 Flutter 中浏览 PageView?
- hyperledger-fabric - 我们可以更新关系的价值吗
- javascript - 如何在 JSBin 中进行 lodash 导入?
- javascript - Dropdown onChanged 不解散的问题
- c++ - 使用 Cstrings 进行猪拉丁语转换
- excel - 查找并替换每次出现的多个值(VBA)