Почему вывод программы через дебаггер отличается от вывода при запуске из оболочки?

Написан код, целью которого является заполнение массива в случайном порядке. Обязательно, чтобы при одинаковых значениях randvalue результат заполнения оставался неизменным. Алгоритм странный, да, но страннее еще то, что при нескольких запусках из bash результат заполнения разный. Логикой мне это не понять. Залез в дебаггер GDB, а там все происходит так, как должно быть. С каждым запуском программы командой run вывод остается неизменным. Как это можно объяснить?

код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define true 1

void main()
{
  char a[79];
  filling(a, 1);

}
void filling(char *rotor, int randvalue)
{
  int tmp = 0;
  int number = 0;
  int findflag = 0;
  int launchflag = 1;
  int i = 0;
  srand(randvalue);
  while(launchflag)
{
  tmp = rand()%79;
  printf("%d\n", tmp);
  for(i; i<79; i++)
  {
    if(rotor[i]==tmp)
    {
      findflag = 1;
      break;
    }
  }
  if(findflag==0)
  {
    rotor[number] = tmp;
    number++;
    i=0;
  }
  if(findflag==1)
  {
    i=0;
    findflag = 0;
  }
    if(number == 78)
    {
      launchflag = 0;
    }
}

}
  • Вопрос задан
  • 45 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
if(rotor[i]==tmp)

В этом месте происходит обращение к неинициализированной памяти, результат может быть каким угодно, рассчитывать на предсказуемую работу программы не стоит.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы