【发布时间】:2019-05-23 22:44:57
【问题描述】:
在提到的代码中,错误是运行时,因为数组大小分配给了新变量
C语言
{ scanf("%d",&n);//size of array
int arr[n];
for(i=0;i<n;i++)
scanf("%d",&arr[i]);
scanf("%d",&givensum);
int i=0;
int j=n-1; // RUN TIME ERROR ? WHY for j=n is No ERROR
while(i<h)
{
if((arr[i]+arr[j]) == givensum){
printf("%d %d %d\n",arr[i],arr[j],givensum);
c++;
}
if((arr[i]+arr[j]) > givensum)
{
j--;
c++;
}
if((arr[i]+arr[j]) < givensum)
{
i++;
c++;
}
if(c == 0)
printf("-1");
}
cases--;
}
return 0;
}
以上第 6 行 n 上面的代码 n 是数组的大小(让 n=7 )并将数组的大小分配给其他一些变量,如 int j; j=n;// 它工作正常但是数组的大小 j=7 和数组的实际大小在从 0 到计数时变为 8(即 0,1,2,3,4,5,6,7) 7 它是 8 实际大小是 7 只有当我分配值 j=n-1;然后发生运行时错误?帮帮我
【问题讨论】:
-
j是什么类型?您得到的exact 错误是什么?此代码不完整,缺少许多定义。 -
在 geeksforGeeks Portal 上练习时出现运行时错误,即由于数组大小“n”分配给变量“int j”而导致的分段错误
-
请一致地缩进您的代码。
-
我已经提供了代码链接,请帮助通过它
-
您也应该在此处提供有问题的完整代码 - 尝试了您链接中的代码,但遇到了未定义行为的循环(
c变量会递增,直到有符号整数溢出)。您应该提供导致崩溃的具体输入(甚至更好:用分配具体值替换scanf调用)。顺便说一句:您永远不会检查这些调用的结果。scanf函数族返回成功扫描变量的数量。