Why for loop doesn't work for 2D array with an overflow but still works for 1D array

Debojit Acharjee 455 Reputation points
2023-07-23T11:03:30.4133333+00:00

The for loop to store values to two 1D arrays can store and print values even with an overflow but why a program to store values to 2D array using for loop doesn't run when there is an overflow?

The following program runs:

#include <stdio.h>

int main()
{
    int i, a[5], b[6];

    for (i = 0; i <= 6; i++)
    {
        a[i] = i;
        b[i] = i;
    }

        for (i = 0; i <= 6; i++)
    {
        printf(" %d", a[i], b[i]);
    }
    
    return 0;
}



But why the following program doesn't run?

#include <stdio.h>

int main()
{
    int i, j, a[5][5];

    for (i = 0; i <= 5; i++)
    {
        for (j = 0; j <= 5; j++)
        {
            a[i][j] = j;
        }
    }


    for (i = 0; i <= 5; i++)
    {
        for (j = 0; j <= 5; j++)
        {
            printf(" %d", a[i][j]);
        }
        printf("\n");
    }

    return 0;
}
Developer technologies C++
Developer technologies Visual Studio Other
Developer technologies C#
{count} votes

1 answer

Sort by: Most helpful
  1. Bruce (SqlWork.com) 77,686 Reputation points Volunteer Moderator
    2023-07-24T15:12:42.4866667+00:00

    C allocation places static or stack variable allocations next to each other. So when you overrun a you are accessing b’s allocation. If you reversed the declaration order of a and b then an overrun of a would corrupt the stack.

    note: you should really use a better c compiler. Your examples often use uninitiated variables. Most modern c compilers mark the first page of memory as inaccessible, so a runtime error is thrown when accessing memory location zero.

    0 comments No comments

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.