Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2013, 16:09   #1
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию Двоичный поиск в массиве.Вылетает ошибка при запуске.

Программа для двоичного поиска в массиве на 5000 элементов из файла data.dat. Код компилируется нормально, но при запуске вылетает ошибка.Не могу понять где проблема
Код:
#include <stdio.h>
#include <conio.h>
#include <locale.h>

int const N = 5000;

main()
{
setlocale(LC_ALL,"RUS");
FILE *fp;
int R = N - 1, L = 0, x, i, m, flag = 0, mass[N];
fp = fopen("..\\resources\\data.dat","r");
	if(fp == NULL)
	{
	printf("Нет файла данных! :(");
	getch();
	return 1;
	}
	for(i = 0;i < N;i++)
	{
	fscanf(fp,"%d",&mass[i]);
	}
fclose(fp);
printf("Введите значение искомого элемента:\n");
scanf("%d",x);
	while(L <= R)
	{
	m = (L + R) / 2;
		if(mass[m] == x)
		{
		flag = 1;
		break;
		}
		if(x < mass[m]) R = m - 1;
		else            L = m + 1;
	}
	if(flag) printf("mass[%d] = %d",m,mass[m]);
	else     printf("Элемент не найден :(");
printf("Готово! :)");
getch();
}
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.
Че Гевара вне форума Ответить с цитированием
Старый 06.01.2013, 16:18   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А трассировку сделать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.01.2013, 18:42   #3
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию

"ваша программа вызвала нарушение доступа (ошибку сегментации)" выскочило мне при входе в цикл while(L <= R). А что там может быть не так, условие вроде адекватное
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.
Че Гевара вне форума Ответить с цитированием
Старый 06.01.2013, 18:48   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
scanf("%d",x);
Параметры для scanf нужно передавать по ссылке, так что пиши & перед передаваемыми параметрами-переменными
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.01.2013, 19:06   #5
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию

Блин........А я думал алгоритм неправильный...А всё так просто...Пойду убьюсь об стену...
А тебе, Stilet, спасибо
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.
Че Гевара вне форума Ответить с цитированием
Старый 06.01.2013, 20:13   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пожалуйста.
В следующий раз внимательнее будешь )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вылетает при запуске slim>>> Общие вопросы C/C++ 6 10.12.2012 19:06
Бинарный(Двоичный) поиск в одномерном массиве bonjovi Паскаль, Turbo Pascal, PascalABC.NET 1 31.01.2012 17:10
Visual Studio 2010, при запуске на debug или rebuild вылетает ошибка Evgeniy1989 Общие вопросы .NET 1 20.08.2010 08:34
Двоичный поиск в массиве структур vistaman1 Общие вопросы C/C++ 2 28.05.2010 17:30
При запуске игры вылетает ошибка DarknEz Софт 28 14.12.2009 14:09