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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2012, 18:31   #1
RomanA
Пользователь
 
Регистрация: 10.08.2011
Сообщений: 30
По умолчанию Функция возвращает неправильный указатель

Пытаюсь написать функцию двоичного поиска. По условию задачи: подается новый элемент и функция должна вернуть указатель на место включения элемента в упорядоченной массив.

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

Т. е, на строке:
if(*Value>=*Right) {printf("Right+1 = %p\n",(Right+1)); getch(); return Right+1;}
функция printf показывает верный результат.
Но в res на строке:
res=Binary_Search(&A[0],&A[8],&C);
присваивается совершенно не то значение.

Вот результаты исполнения:
Цитата:
Right+1 = 0012FF44
0012FF43 < 0012FF4C = 0012FF44
Видимо не совсем всё понимаю, что происходит при выходе из функции: почему в res присваивается не тот адрес. И вообще непонятно что за адрес присваивается в res.

P. S. Массив char используется, т. к. лаб. работа посвящена символьным массивам.

P. P. S. Забыл сказать, что код чисто C (не C++) и используется консольное приложение в Borland C++Builder 6.

Код:
#pragma hdrstop
#include <stdio.h>
#include <conio.h>
//---------------------------------------------------------------------------
#pragma argsused
char* Binary_Search(char*,char*,char*);

int main(int argc, char* argv[])
{
	char C='4';
	char* res;
	char A[9];
	A[0]='0'; A[1]='1'; A[2]='2';
	A[3]='3'; A[4]='5'; A[5]='6';
	A[6]='7'; A[7]='8'; A[8]='9';
	clrscr();

//Call
	res=Binary_Search(&A[0],&A[8],&C);

	printf("%p < %p = %p",&A[3],&res,&A[4]);
	getch();
        return 0;
}

char* Binary_Search(char* Left, char* Right, char* Value)
	{
//Definition variables
	int n; //(Size of subarray)/2

//Test of data
	if(Right<Left) return NULL;
	if(Right==Left)
		if(*Value>=*Right) {printf("Right+1 = %p\n",(Right+1)); getch(); return Right+1;}
		else return Right;

//Calculation n
	n=(Right-Left)/2;

//Recursion
	if(*Value>*(Right-n)) return Binary_Search(Right-n,Right,Value);
	else return Binary_Search(Left,Right-n-1,Value);
	}
//---------------------------------------------------------------------------

Последний раз редактировалось RomanA; 25.02.2012 в 18:47.
RomanA вне форума Ответить с цитированием
Старый 25.02.2012, 18:59   #2
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Ваша функция работает правильно (насколько я могу судить).
Просто очепятка в printf("%p < %p = %p",&A[3],&res,&A[4]);
Вы берете адрес на указатель
а надо просто printf("%p < %p = %p",&A[3], res,&A[4]);
EUGY вне форума Ответить с цитированием
Старый 25.02.2012, 19:00   #3
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Вот здесь
Код:
printf("%p < %p = %p",&A[3],&res,&A[4]);
Вы выводите не значение переменной res, а адрес, по которому она хранится.
Уберите у res амперсанд.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 25.02.2012, 19:06   #4
RomanA
Пользователь
 
Регистрация: 10.08.2011
Сообщений: 30
По умолчанию

Оййй... спасибо большое)))
Я уже себе мозг сломал)))
RomanA вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция не возвращает данные. Abuhamed JavaScript, Ajax 4 26.10.2011 10:33
Функция возвращает массив Рик Общие вопросы Delphi 5 22.03.2011 09:07
Функция Pos возвращает 0 gufon Общие вопросы Delphi 16 14.03.2011 22:10
функция не возвращает результат=( Chica Bond Общие вопросы C/C++ 14 03.12.2010 18:47
Функция не возвращает значения 2.0 Winlook PHP 1 10.05.2010 00:58