C++在不知道大小的情况下检测悬空指针

abu*_*amq 1 c++ arrays null pointers

考虑一段代码

int main(int argc,char* argv[]){
        int *arrPtr = new int[4];
        for (int i=0;i<4;i++)
                arrPtr[i]=i*2;


        for (int i=0;i<10;i++){
                arrPtr++;
                cout<<"arrPtr ["<<i<<"]\t"<<*arrPtr<<endl;
        }
        cout<<endl;
        return 0; }
Run Code Online (Sandbox Code Playgroud)

当我编译这个程序

g ++ main.cpp -o main && ./main

它给了我

arrPtr [0]  2
arrPtr [1]  4
arrPtr [2]  6
arrPtr [3]  0
arrPtr [4]  135145
arrPtr [5]  0
arrPtr [6]  0
arrPtr [7]  0
arrPtr [8]  0
arrPtr [9]  0

我希望能够在arrPtr未指向"valid"元素时检测(抛出或检查).在上面的代码中,最后一个有效元素是arrPtr [3].

请不要"我太"的答案!

Fre*_*Foo 5

用一个vector.

int main()
{
    std::vector<int> a(4);

    for (size_t i = 0; i < 4; ++i)
        a[i] = i * 2;
    for (size_t i = 0; i < 10; ++i)
        std::cout << i << ": " << a.at(i) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

结果:

0: 0
1: 2
2: 4
3: 6
terminate called after throwing an instance of 'std::out_of_range'
  what():  vector::_M_range_check
Aborted
Run Code Online (Sandbox Code Playgroud)

  • @ mkhan3189使用向量有什么不通用的?这是要走的路,期间. (4认同)