我正在尝试在程序中修复SIGSEGV错误。我找不到错误的位置。该程序在Xcode中成功编译,但是没有提供结果。
该程序的目标是检查同一元素是否出现在三个单独的数组中,如果该元素超过2个,则返回该元素。
#include <iostream>
using namespace std;
int main()
{
int i = 0 ,j = 0,k = 0;
int a[5]={23,30,42,57,90};
int b[6]={21,23,35,57,90,92};
int c[5]={21,23,30,57,90};
while(i< 5 or j< 6 or k< 5)
{
int current_a = 0;
int current_b = 0;
int current_c = 0;
{ if (i<5) {
current_a = a[i];
} else
{
;;
}
if (j<6)
{
current_b = b[j];
} else
{
;;
}
if (k<5)
{
current_c= c[k];
} else
{
;;
}
}
int minvalue = min((current_a,current_b),current_c);
int countoo = 0;
if (minvalue==current_a)
{
countoo += 1;
i++;
}
if (minvalue==current_b)
{
countoo +=1;
j++;
}
if (minvalue==current_c)
{
countoo += 1;
k++;
}
if (countoo >=2)
{
cout<< minvalue;
}
}
}
我没有得到任何代码输出。
答案 0 :(得分:1)
这肯定不是您想要的
int minvalue = min((current_a,current_b),current_c);
如果min()
的定义有意义(您确实应该为此类问题提供MCVE),
int minvalue = min(min(current_a,current_b),current_c);
这将导致(a和b)和c的最小值中的最小值,即所有三个值中的最小值,而不是b和c的最小值。逗号运算符,
对于理解这一点很重要。
这似乎是一个标记/计数器,可以在循环执行中做笔记或计数
int countoo = 0;
但是,如果在循环中定义变量,则无法使用。
您需要在while
之前移动那一行。
通过这一行,您不会阻止索引离开数组的大小,
这很可能是段错误的来源。
while(i< 5 or j< 6 or k< 5)
为了防止出现段错误,请确保所有索引保持足够小,
而不是至少一个。
while(i< 5 && j< 6 && k< 5)
(通过最初的方式,我严重怀疑or
是否可以编译。我认为
使用or
的宏可以,但是我看不到。我可能错过了最新的C ++标准更新中的新操作符...
事实证明确实如此。我在这里学到了一些东西。)
这应该修复段错误。
为了实现代码的目标,我认为您需要在算法上花费一些额外的精力。我看不到与目标相关的代码。