【发布时间】:2015-11-19 02:06:55
【问题描述】:
这肯定有问题吧?
#include <stdio.h>
#define NUM 1
#define NUM_SWARMS 3
typedef float coor_t[NUM];
typedef coor_t gBestX_t[NUM_SWARMS];
gBestX_t gBestX;
int main()
{
gBestX[0][1] = 3.0;
gBestX[1][1] = 3.0;
gBestX[8][1] = 4.0;
printf("%f\n", gBestX[8][1]);
return 0;
}
在我看来,这是将 gBestX 创建为大小为 [1][3] 的 2D 数组,但 gcc 和 valgrind 都在抱怨这一点,我得到了正确的输出 (4.0)。这不是违反数组越界吗?
【问题讨论】:
-
是的。但是你为什么指望 gcc 抱怨呢? (而且我认为 valgrind 只检查 malloc 的内存,而不是全局或局部变量)
-
@immibis 我想我认为 gcc 会抱怨访问内存超出数组边界。
-
@immibis 是否有一个标志或更好的方法可以做到这一点,以便如果我在我的程序中搞砸了它会成为一个问题?