在C中更新数组中的值

时间:2017-02-10 05:07:04

标签: c arrays segmentation-fault

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

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;
  }
}

当我取出改变“currentVal”的步骤时,没有分段错误。提前谢谢!

5 个答案:

答案 0 :(得分:3)

你的病情错了

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

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

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

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

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

答案 1 :(得分:0)

你从来没有声明数组的大小,所以它是一个长度为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;
}

答案 2 :(得分:0)

这不是你想要做的吗?

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

这不适合你吗?

修改

由于if (p < 25 || p > -25)的短路评估,

||将对诸如-50,-26等值的值评估为真,这意味着p < 25将首先进行评估,如果找到true true 1}}不会评估其他条件。

对于50之类的数字,第二个条件将评估为theArray,而temp将再次超出if (p < 25 && p > -25)的范围

在任何一种情况下,您都会看到分段错误

#include <stdio.h> #include <string.h> int contain( int argc, char* argv[]) { int i; int j; int lenst1; int lenst2; int pos1; int pos2; if (lenst2>lenst1) { printf("flase"); return 0; } for (j=0; j<lenst1;j++) { for (i=0; i<lenst2; i++) { if (st2[i]==st1[j]) { pos1=j; pos2=i; while (pos2<lenst2) { pos2++; pos1++; if (st2[i]==st1[j]) { } else { printf("flase\n"); return 0; } printf("true\n"); return 0; } } } } } 可以帮到你。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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