Comprobación del límite de acceso a la matriz

  • Cuando c ++ accede a una matriz, no importa si se accede mediante subíndice o puntero, no se comprobará su límite, incluso si el acceso excede el límite de la matriz.
  • El siguiente código define una matriz con una longitud de 7. Cuando el número de accesos supera los 7, el compilador del programa de ejecución no informará de un error.
int a[7] = {
    
     0,1,2,3,4,5,6 };
int a7=1, a8=1;

int main()
{
    
    
    int i;

    cout << "数组各个元素的地址" << endl;
    for (i = 0; i < 9; i++)
    {
    
    
        cout << "a[" << i << "]的地址为" << (a + i) << endl;
    }
    cout << "a7的地址为" << &a7 << endl;
    cout << "a8的地址为" << &a8 << endl;
    cout << endl;

    cout << "以下标方式访问数组" << endl;
    for (i = 0; i < 9; i++)
    {
    
    
        cout << "a["<< i << "]=" << a[i] << " ";
    }
    cout << endl;
    cout << endl;

    cout << "以下标方式访问数组" << endl;
    for (i = 0; i < 9; i++)
    {
    
    
        cout << "a[" << i << "]=" << *(a+i) << " ";
    }
    cout << endl;
    cout << endl;

    cout << "未超限写数组之前a7和a8的数据" << endl;
    cout << "a7=" << a7 << endl;
    cout << "a8=" << a8 << endl;
    cout << endl;

    cout << "超限写数组...." << endl;
    for (i = 0; i < 9; i++)
    {
    
    
        a[i] = i;
    }
    cout << endl;

    cout << "超限写数组之后a7和a8的数据" << endl;
    cout << "a7=" << a7 << endl;
    cout << "a8=" << a8 << endl;
 }

El resultado de la ejecución es el siguiente: el
Se superó el acceso a la matriz
overrun a [7] y a [8] y el tipo int definido a7, las direcciones de las variables a8 son las mismas, cuando el overrun accede a a [7] y a [8], los datos se leen out es igual que los datos de inicialización de a7 y a8. Cuando se sobrescriben los datos de la matriz, los datos de a [7] y a [8] se sobrescriben para cambiar los datos de las variables a7 y a8.

  • Resumen: 1. El compilador de c ++ no verificará la lectura y escritura por encima del límite de la matriz, los datos del acceso por encima del límite a la matriz pueden obtener datos inesperados y la escritura por encima del límite de los datos de la matriz puede cambiar los datos de otras variables, por lo que el programa puede no comportarse como se esperaba; 2. El acceso de subíndice a la matriz es esencialmente mediante el acceso de puntero, el nombre de la matriz es la primera dirección y el subíndice es el desplazamiento de la dirección (personal comprensión, señale el error).

Supongo que te gusta

Origin blog.csdn.net/qq_36439722/article/details/105307732
Recomendado
Clasificación