【问题标题】:Array size assigning Error in C programming? [closed]C编程中的数组大小分配错误? [关闭]
【发布时间】: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;然后发生运行时错误?帮帮我

https://ide.geeksforgeeks.org/SuA0hcfL14

【问题讨论】:

  • j 是什么类型?您得到的exact 错误是什么?此代码不完整,缺少许多定义。
  • 在 geeksforGeeks Portal 上练习时出现运行时错误,即由于数组大小“n”分配给变量“int j”而导致的分段错误
  • 请一致地缩进您的代码。
  • 我已经提供了代码链接,请帮助通过它
  • 您也应该在此处提供有问题的完整代码 - 尝试了您链接中的代码,但遇到了未定义行为的循环(c 变量会递增,直到有符号整数溢出)。您应该提供导致崩溃的具体输入(甚至更好:用分配具体值替换 scanf 调用)。顺便说一句:您永远不会检查这些调用的结果。 scanf 函数族返回成功扫描变量的数量。

标签: c arrays sorting sum


【解决方案1】:

'C' 确实提供任何数组边界检查。如果您为大小为 7 的数组编写 arr[7],则会损坏内存。不会有运行时错误。它可能会导致崩溃,改变其他不相关变量的值,但不会出现预期的运行时错误。

因此,您自己需要确保不会在数组边界之外写入(或读取)。不知道你为什么在谈论j,它没有在你的代码片段中的任何其他地方使用。我只看到ih,后者甚至没有被声明。

您必须确保ih 都不会大于n-1(或小于0)。

顺便说一句,j = n-1 只是一个简单的赋值,与数组的大小无关。

【讨论】:

  • 抱歉代码,j 和我只使用整个代码,我想读取数组大小 n 并将 n 大小分配给其他名为 j 的变量,因此对 j 值的任何更改都不会反映原始大小n的变化因为我后来在程序之前有数组大小的值发生了变化所以我不想改变数组的大小因此我将数组大小分配给名为j的变量并且vaiable正在使用在不影响原始变量 n 的情况下完成代码
【解决方案2】:

您不能在 C 中动态分配数组大小。请通过正确初始化大小来获取所需大小的数组。

例如,我将在程序中的任何时候使用最多 10 个数字,那么我应该按如下方式初始化数组:

int a[10];

【讨论】:

  • 你考虑过VLA吗?
  • 那么我们该怎么做,请帮忙
  • 大多数 C 实现不支持 VLA
  • @Varun 如果不支持 VLA,那么您已经收到编译错误 - 这里显然不是这种情况,因此使用中的编译器支持 VLA。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-02
  • 2014-09-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
相关资源
最近更新 更多