欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数组越界访问测试

程序员文章站 2024-03-15 14:02:11
...

对int nums[10]进行数组越界测试

文件test.cpp

第一次测试

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int nums[10] = {0,1,2,3,4,5,6,7,8,9};
    cout << nums[10];
    return 0;
}

用g++命令编译
数组越界访问测试

程序没有崩溃,输出一个随机数

第二个程序如下

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int nums[10] = {0,1,2,3,4,5,6,7,8,9};
    nums[10] = 10;
    return 0;
}

数组越界访问测试

发生段错误(core dumped)

在Visual studio下一样。
数组越界访问测试

总之,程序无法发现数组越界读取的错误,但是在发生数组越界写入的时候会发生段错误(core dumped)。

对vector nums(10)进行数组越界测试

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> nums{0,1,2,3,4,5,6,7,8,9};
    cout << nums.size() << endl; 
    nums[101] = 10;
    cout << nums[101] << endl;
    return 0;
}

在g++平台下
数组越界访问测试

程序无任何报错

但在visual studio平台下,程序1

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> nums{ 0,1,2,3,4,5,6,7,8,9 };
    cout << nums.size() << endl;
    nums[10] = 10;

    return 0;
}

数组越界访问测试

程序二

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> nums{ 0,1,2,3,4,5,6,7,8,9 };
    cout << nums.size() << endl;
    cout << nums[10] << endl;

    return 0;
}

数组越界访问测试

再visual studio平台下,vector数组,程序运行只要发生越界访问,程序运行就会发生错误。

总结,g++对于vector数组,无法发现越界访问;visual studio 对于vector数组越界访问能够发现并报错。

相关标签: c++