我有一个数组,其值初始化为整数值。当我尝试更改值并打印到文件时,代码会编译,但在执行时返回"分段错误"错误。任何想法将不胜感激!
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)
应该帮助你。