我似乎遇到了一个问题,当我访问超出数组范围的索引时,我的编译器没有正确地给我一个异常。
例如: 在我的代码中我有
int reds[8][8];
这应该创建一个高度为8(0-7)和宽度为8(0-7)的二维数组。 问题是,我以后会有以下几行代码:
reds[0][8] = 1;
reds[0][65] = 1;
我的代码编译得很好,没有错误。但是,我的程序显然不能按照我想要的方式工作。
if(reds[r][column] > 0){
if(column == 0) Red1_Write(0);
if(column == 1) Red2_Write(0);
if(column == 2) Red3_Write(0);
if(column == 3) Red4_Write(0);
if语句每次都不应该进入。第0行第1列的数组值设置为零。我做错了什么?
答案 0 :(得分:0)
欢迎来到“C”。 “C”中的数组没有边界检查。访问数组末尾的索引会导致未定义的行为(即崩溃和其他奇怪的行为)。
程序员需要以防止这种情况的方式进行编码。如果您还没有这样做,请查看C ++标准库(基于旧的STL),它提供了可帮助您管理此类情况的通用容器类。如果您可以在程序中使用C ++编译器,这显然会很有用。
STL:http://www.sgi.com/tech/stl/
微软:http://msdn.microsoft.com/en-us/library/cscc687y.aspx