相关疑难解决方法(0)

访问数组越界没有错误,为什么?

我在C++程序中为这样的边界分配值:

#include <iostream>
using namespace std;
int main()
{
    int array[2];
    array[0] = 1;
    array[1] = 2;
    array[3] = 3;
    array[4] = 4;
    cout << array[3] << endl;
    cout << array[4] << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

程序打印34.应该是不可能的.我正在使用g ++ 4.3.3

这是编译和运行命令

$ g++ -W -Wall errorRange.cpp -o errorRange
$ ./errorRange
3
4
Run Code Online (Sandbox Code Playgroud)

只有在分配时才array[3000]=3000会给我一个分段错误.

如果gcc没有检查数组边界,我怎么能确定我的程序是否正确,因为它可能会导致一些严重的问题?

我用上面的代码替换了

vector<int> vint(2);
vint[0] = 0;
vint[1] = 1;
vint[2] = 2;
vint[5] = 5;
cout << vint[2] << endl;
cout …
Run Code Online (Sandbox Code Playgroud)

c++ arrays

157
推荐指数
6
解决办法
10万
查看次数

为什么普通 C 数组索引是有符号的,而 stl 索引是无符号的?

我理解为什么 stl 索引是无符号的,因为你永远不会有负索引。但对于普通的 C 数组,索引有符号的。为什么是这样?

如果有充分的理由对 C 数组索引进行签名,那么为什么他们决定使 stl 索引不同呢?

c c++ indexing stl

1
推荐指数
1
解决办法
154
查看次数

下标运算符中不会发生无符号下溢,为什么?

我一直认为下一个例子是未定义的行为(访问数组越界):

int main()
{
    int* a= new int[3];
    a[0] = 100;
    a++;
    
    unsigned long index = 0;
    
    printf("%d\n", a[-1]);
    printf("%d\n", a[index - 1]);
    printf("%ul\n", index - 1);
}
Run Code Online (Sandbox Code Playgroud)

然而,这个输出很好:

100
100
4294967295l
Run Code Online (Sandbox Code Playgroud)

为什么下标运算符不会发生下溢?

c++ integer-overflow

-3
推荐指数
1
解决办法
176
查看次数

标签 统计

c++ ×3

arrays ×1

c ×1

indexing ×1

integer-overflow ×1

stl ×1