相关疑难解决方法(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++函数调用不是预期的.

我写了一个简单的函数如下......

int fun(int *i, int *j) 
{  
     *i += 3; 
     *j += *i; 
     return (*i + *i); 
}
Run Code Online (Sandbox Code Playgroud)

在主函数中,我将函数调用如下...

int main()
{
    int x = 3, y = 2, a, b; 
    a = x + y + fun(&x, &y) + x; 
    b = y + fun(&x, &y) + y;

    cout<<" a = " << a << "\n";
    cout<<" b = " << b << "\n";

}
Run Code Online (Sandbox Code Playgroud)

现在问题是输出不如预期

运行后这是输出

a=23
b=52
Run Code Online (Sandbox Code Playgroud)

我在期待

a=23 
b=46
Run Code Online (Sandbox Code Playgroud)

我不知道究竟是否有人可以解释.

c++

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

标签 统计

c++ ×2

arrays ×1