我是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;
}
答案 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++)
请了解如何 使用调试器。