C编程中的数组大小分配错误?
在提到的代码中,由于数组大小分配给新变量,错误是在运行时发生的 C语言C编程中的数组大小分配错误?,c,arrays,sorting,sum,C,Arrays,Sorting,Sum,在提到的代码中,由于数组大小分配给新变量,错误是在运行时发生的 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) {
{ 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;
{scanf(“%d”,&n);//数组大小
int-arr[n];
对于(i=0;i您无法在C中动态分配数组大小。请通过正确初始化大小来获取具有所需大小的数组
例如,我将在程序中的任何时候使用最多10个数字,然后我应按如下方式初始化数组:
int a[10];
“C”不提供任何数组边界检查。如果为大小为7的数组写入arr[7],则会损坏内存。不会出现运行时错误。它可能会导致崩溃,更改其他无关变量的值,但不会出现预期的运行时错误
因此,您自己需要确保不在数组边界之外写入(或读取相同内容)。不确定为什么要谈论j
,它在代码片段的其他任何地方都没有使用。我只看到I
和h
,后者甚至没有声明
您必须确保i
和h
都不会大于n-1
(或小于0)
顺便说一句,j=n-1
只是一个简单的赋值,与数组大小无关。什么类型的j
?您得到的确切错误是什么?此代码不完整,缺少许多定义。我在Geeksforgeks Portal上练习时出现运行时错误,即由于数组大小“n”而导致的分段错误变量“int j”的赋值请一致地缩进您的代码。我已经提供了代码的链接,请通过它提供帮助您也应该在这里提供完整的代码-尝试了链接中的代码,遇到了一个行为未定义的循环(c
变量递增,直到有符号整数溢出)。您应该提供导致崩溃的具体输入(或者更好:用具体值的赋值替换scanf
调用)顺便说一下:你从来没有检查过这些调用的结果。<代码> SCANF函数族返回成功扫描的变量的数量。你考虑过了吗?那么我们怎么才能做到这一点?请帮助大多数C实现不支持。VLA@Varun如果不支持VLA,那么您已经得到一个编译错误-这里显然不是这样,所以VLA是由使用中的编译器支持的。对不起,代码,我和j只使用整个代码,我想读取数组大小n,并将n size赋给另一个名为j的变量,所以对j值的任何更改都不会反映原始大小n的更改,因为我后来使用了程序,数组大小的值发生了更改,所以我不知道'我不想更改数组的大小,因此我将数组大小分配给名为j的变量,vaiable将在代码中使用,而不影响原始变量n