【发布时间】:2020-01-10 18:02:55
【问题描述】:
问题是将二维数组分配给一维数组
uint8_t Schedules[24][8]={
{0,1,1,1,1,1,1,0},
{0,2,2,2,2,2,2,0},
{0,3,3,3,3,3,3,0},
...
{0,24,24,24,24,24,24,0}
}
for (this_hour=0;this_hour<24;this_hour++){
for(this_section=1;this_section<7;this_section++)
{
buff[this_hour*9+this_section+2]=Schedules[this_hour][this_section];
}
}
结果必须是
buff[3..8]=1; /* Pseudocode; means buff[3]=1, buff[4]=1, ..., buff[8]=1 */
buff[9..11]=0;
buff[12..17]=2;
buff[18..20]=0,
...
然而,这就是结果
我不知道我错在哪里。我检查了十次循环,没有发现任何错误。我在 keil 5 中为 stm32 ARM 编写 freertos。我确保仅在 for 循环中访问 buff 而在代码中没有其他位置。这不是堆栈溢出,因为我给堆栈一个很大的数字
【问题讨论】:
-
为什么要乘以 9?
-
this_section应初始化为 0,而不是 1。buff的索引应为this_hour*8+this_section。 8 是因为每个二维数组中有 8 个元素。不需要添加偏移量 2。 -
9 是我的计划的一部分,我有 9 个部分,其中 6 个已填满时间表,其他 3 个将在稍后填写。我在 buff 的开头有 3 个标头字节。它们不重要,为什么buff填充不正确?
-
您的输出模式表明您在其他地方有堆损坏。
-
@david:我绝对确定它不在您发布的代码中。
标签: c for-loop variable-assignment