You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中memset处理动态数组的异常行为原因咨询

关于C++中memset处理栈数组与动态数组的差异问题

核心原因:sizeof的作用对象类型完全不同

  • 栈上数组场景:声明int dp[5];时,dp是数组类型(具体为int[5]),并非指针。此时sizeof(dp)直接计算整个数组的总字节数,即sizeof(int) * 5。memset以该值作为第三个参数,刚好覆盖数组所有字节,因此所有元素能被正常置0。
  • 动态数组场景:写int *dp = new int[5];时,dp是指针变量,仅用于存储动态数组的首地址。此时sizeof(dp)计算的是指针本身的字节数(32位系统为4字节,64位系统为8字节)。由于一个int通常占4字节,memset仅能修改前1个(64位)或2个(32位)int元素的字节,剩余元素未被覆盖,因此保留垃圾值。

动态数组的正确处理方式

你提到的memset(dp, 0, sizeof(dp[0]) * n)是正确方案:sizeof(dp[0])获取单个int的字节数,乘以元素个数n得到动态数组的总字节数,memset以此值作为参数即可覆盖所有元素,实现全部置0。


内容的提问来源于stack exchange,提问作者Cash flow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 02:52:06