LINUX.ORG.RU

[C++][Segment Fault]cout<

 


0

1

Писал программу, и столкнулся со следующей проблемой. В программе я использовал цикл while, в котором от значения m уменьшается переменная int i с шагом в единицу, и когда она равна минус единице, цикл заканчивается. В цикле мне понадобилось вывести на экран значение i+1. При запуске программы выскакивает Segment Fault.

Что интересно, при cout <<i; программа работает(хоть и некорректно, ибом не необходимо ввывести значение i=1), меняю на cout <<i+1; -выдает сегфаулт. Я так понял, предложение cout <<i+1; изменяет i на единицу? Что в свою очередь приводит к тому что в цикле одновременно я увеличиваю и уменьшаю i на 1, что приводит к бесконечному циклу и, соответственно, к переполнению стека?

Можно ли в С++ вывести на экран значение i+1, не изменив значение i, и при этом не используя костыли, наподобие

cout <<i+1;
i-=1;

или без этого никак?



Последнее исправление: BlacKeeper (всего исправлений: 1)
Ответ на: комментарий от BlacKeeper

(=

int P[m],Q[n];

C99 - способ объявления массивов?

m, n - не константные выражения. Я понимаю, что g++ разрешает, но всё же - это пока не C++ =)

Может лучше:

#include <vector>
...
size_t m, n;
...
vector<int> P, Q;
...
// Проверка m, n на допустимые значения
...
P.resize(m);
Q.resize(n);
m4n71k0r
()
Ответ на: комментарий от anonymous

Мб потому что Wall давно уже не всё показывает?

cat 1.cpp

int
main()
{
  int m, n;
  int p[m], q[n];
}
$ g++ 1.cpp -Wextra
1.cpp: In function ‘int main()’:
1.cpp:5: warning: ‘m’ is used uninitialized in this function
1.cpp:5: warning: ‘n’ is used uninitialized in this function

philosoft
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.