【发布时间】:2015-09-29 11:29:49
【问题描述】:
代码是在 C 中检查 memset 的工作。memset 将数组正确初始化为 0,但是当我尝试用 10 初始化它时,它会用一些非常大的垃圾值初始化数组。出了什么问题?
#include <stdio.h>
#include<string.h>
int main(void)
{
int dp[10008],i;
memset(dp,10,sizeof(dp));
for(i=0;i<10;i++)
printf("%d\n",dp[i]);
return 0;
}
【问题讨论】:
-
memset 用 10 初始化每个字节。当您解释其中包含 10(或 8 或其他)的四个字节时,您将获得这些值。您需要遍历数据并设置每个整数(不是byte ) 到 10 如果这就是你想要的
-
@amdixon:是的。为什么不写这个作为答案呢?
-
虽然 a 解决方案在 C 和 C++ 中可能相同,但 C++ 有其他更好的替代方案 (IMO)。请选择您想要解决方案的语言。
-
您不应该在堆栈上分配大量数据。也就是说,除非你是堆栈溢出的粉丝。
-
@Lundin - 40 kB 并不是大量数据。例如,32 位 Linux 上线程的默认堆栈大小为 2 MB,而主线程堆栈可以增长到远大于此。