在 C 中更新数组中的值



我有一个数组,其值初始化为整数值。当我尝试更改值并打印到文件时,代码会编译,但在执行时返回"分段错误"错误。任何想法将不胜感激!

int theArray[50];
...//code setting the array values to zero
int i;
for(i = 0; i < 50; i++)
{
  ...//code setting int "p" to some number between -100 and 100
  if (p < 25 || p > -25)
  {
  int temp = p + 25;
  int currentVal = theArray[temp];
  theArray[temp] = currentVal + 1;
  }
}

当我取出更改"当前Val"的步骤时,没有分段错误。提前感谢!

你的条件是错误的

if (p < 25 || p > -25)
如果 p 为 1000

,它将输入 if 以及 p 为 -1000 时。您需要 AND 逻辑运算符

if (p < 25 && p > -25)

此外,由于您的有效索引范围从 0 到 49(包括 0 和 49(,我认为其中一个运算符必须包含相等性,即:

if (p < 25 && p >= -25)

您从未声明数组的大小,因此它是一个长度为 0 的数组(尚未分配任何整数(。因此,然后您尝试初始化数组的一部分,由于访问不允许的内存,您会收到分段错误。

若要解决此问题,请为数组指定一个编译时常量数组大小:

int theArray[50];
...//code setting the array values to zero
int i;
for(i = 0; i < 50; i++)
{
  int currentVal = theArray[i]; // make sure you've initialized the array before doing this
  theArray[i] = currentVal + 1;
}

在给出输入时,您必须输入的整数大于数组 theArray[] 的大小,即 50.这就是编译器向您显示分段错误的原因。

我几乎可以肯定它是if(p<25 && p>-25)...您可能混淆了逻辑运算符。

这不是你想做的吗?

int i;
for(i = 0; i < 50; i++) {
    theArray[i] += 1;
}

这对你不起作用吗?

编辑

由于||的短路评估,if (p < 25 || p > -25) 对于 -50、-26 等值的计算结果为 true,这意味着将首先评估p < 25,如果找到true则不会评估其他条件。

对于像 50 这样的数字,第二个条件的计算结果将变为 true 并且 temp 将再次超出界限theArray

无论哪种情况,您都会看到分段错误

if (p < 25 && p > -25)应该帮助你。

相关内容

  • 没有找到相关文章

最新更新