#c #segmentation-fault
#c #ошибка сегментации
Вопрос:
я получаю фатальный сигнал 11, когда я должен показать первые n простых чисел. я попытался сохранить числа внутри вектора / массива и получить эту ошибку, поймав фатальный сигнал 11
#include <iostream>
using namespace std;
int main(){
int n,i=1,a=2,l=1,t,c,p=1;
t=n;
cin>>n;
int v[n];
for(c=1;c<=t;i )
{
while(a<=i/2 amp;amp; l==1)
{
if(i%a==0)
{
l=0;
}
a;
}
if(l==1)
{
v[p]=i;t--;
}
a=2;l=1;p ;
}
for(p=1;p<=n;p )
{
cout<<v[p]<<" ";
}
return 0;
}
Комментарии:
1. 🔎🐞Вы просматривали свой код с помощью отладчика , чтобы увидеть, где возникает эта ошибка, а затем запускали его снова, чтобы посмотреть, что происходит до этого момента?
2.
int v[n];
Это не стандартный C . Если вам нужен массив с динамическим размером, вам, вероятно, следует использоватьstd::vector
вместо этого.3. Также индексы массива начинаются с
0
, поэтомуfor(p=1;p<=n;p )
доступ к массиву выходит за его границы и вызывает неопределенное поведение4. Также
t=n;
означает, чтоt
он находится в неопределенном состоянии, посколькуn
еще не инициализирован, поэтомуfor(c=1;c<=t;i )
вызывает неопределенное поведение5. Я бы также рекомендовал потратить некоторое время на обдумывание лучших имен переменных. В его текущем состоянии этот код нелегко выполнить. И если вы не играете в code golf , бонусные баллы за использование как можно меньшего количества символов не начисляются. Некоторые имена, которые приходят на ум, включают
primes
,divisor
,remainder
,max_value_to_check
, и т.д.current_index
Ответ №1:
Убитый сигналом 11 / Пойманный фатальный сигнал 11 / Остановленный сигналом 11 возникает, когда возникают проблемы с использованием памяти. Наиболее распространенной причиной является «out of vector» — ссылка на элемент, который не существует в векторе.
Комментарии:
1. Добро пожаловать в Stackoverflow и благодарим вас за ответ. Однако лучшим ответом было бы объяснить, где, по вашему мнению, могла возникнуть эта ошибка, что помогло бы будущим пользователям лучше понять проблемы с показанным здесь кодом, который пытается использовать тип массива C в качестве динамического массива / вектора.