堆栈&数组c语言中的缓冲区溢出

时间:2013-11-22 16:41:48

标签: c

我是c编程中的新手,并且不熟悉缓冲区和堆栈的主题..任何人都可以检测出问题的原因..谢谢你,

这是我的程序..首先我得到运行时错误

“变量'arr2'周围的堆栈已损坏”

然后当我继续推出这件事时

“arr2.exe中发生缓冲区溢出,导致程序内部状态损坏。按Break调试程序或继续终止程序。”(arr2是我的程序名称)

这是我的源代码(microsoft visual studio 2010)(c语言)这个程序只是意味着读取两个数组的元素

#include <stdio.h>
#include <conio.h>

int main()
{
    int arr1[2][2] , arr2[2][2];
    int i,j;


    /* to read the elements of first array */
    printf("enter the elements of the first matrix\n");

    for(i=0;i<=2;i++)


    {
        for(j=0;j<=2;j++)
        {
            printf("enter the number[%d][%d]",i+1,j+1);
            scanf("%d",&arr1[i][j]);

        }
    }

/* to read the elements of the second array */
    printf("enter the elements of the seconf matrix\n");
        for(i=0;i<=2;i++)
        {
            for(j=0;j<=2;j++)
            {
                printf("enter number[%d][%d]",i+1,j+1);
                scanf("%d",&arr2[i][j]);
            }

        }
return 0;
}

4 个答案:

答案 0 :(得分:1)

始终记住索引从零开始,所以这是错误的:

for(i=0;i<=2;i++)

应该是

for(i=0;i<2;i++)

其他循环相同。

答案 1 :(得分:1)

在C数组中,从0索引。循环

  for(i=0;i<=2;i++)

   for(j=0;j<=2;j++)  

将填充数组。

答案 2 :(得分:1)

这些for循环会导致错误:

for(j=0;j<=2;j++)

您将尝试访问未定义的arr1[i][2](也适用于i&gt; = 2)。由于您将数组声明为此形式:int arr[2][2],因此您需要使用for循环:

for(j = 0; j < 2; j++)  // Same for i : for(i = 0; i < 2; i++)

答案 3 :(得分:0)

所有for循环都可能不正确(因为在声明t[2]数组时,索引应为0或1)。 <=应该是<,例如。

 for(i=0;i<2;i++)

了解如何 使用调试器