我有一个数组,其值初始化为整数值。当我尝试更改值并打印到文件时,代码会编译但在执行时会返回“分段错误”错误。任何想法都会非常感激!
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”的步骤时,没有分段错误。提前谢谢!
答案 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)
......你可能会混淆逻辑运算符。