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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2011, 18:54   #1
Akkoks
 
Регистрация: 10.06.2011
Сообщений: 3
Плохо C/C++ проблема с передачей ДМУ

Отладчик ругается при вызове функции ссылаясь на то что МУ присвоен неправильный указатель... не получается решить данную проблему. Это часть курсовой работы и идею алгоритма менять нельзя. Уже час парюсь ничего не добился путного... помогите
частые выводы - это ручная отладка, там где "-ок" программа прошла данный отрезок без нареканий...

Код:
#include <stdio.h>
#include <string.h>
int N=4;
struct tree{
	int n;		// Значений в дереве
	char **s; 
	tree *l,*r;
	void creat(){r=l=NULL; n=NULL; s=new char*[N]; for(int i=0;i<N;i++) s[i]="null"; } //создание пустой вершины
void create(char** s0,int n0){ //создание вершины со значением - не хочет принимать МУ... отладчик ругается на неправильный указатель
	r->l=NULL;
	n=n0;
	s=s0;
}};
void exteud(tree *p) //функция при переполнении МУ на строки  в концевой вершине порождает 2 потомка и делит МУ на 2 части
{
	for(int i=0;i<N;i++)
		printf_s("%s\t",p->s[i]); -ок
	p->l=new tree;
	p->l->create(p->s,p->n); //перенос значений вершины в потомка  <------вот тут неправильно передает МУ
	p->r=new tree;
	p->r->creat();//создание пустого правого потомка
	p->l->n=p->r->n=N/2;//разделить на 2 части 
	for(int i=0;i<N/2;i++)
		p->r->s[i]=p->l->s[i+N/2]; //переписывание половины в правую концевую
	}
void insert(tree *p,char *c){ //включение строки
		if(p->l==NULL) //конечная
		{
			printf("%s\t",c); -ок
			char *ss;
			ss=new char[strlen(c)];
			strcpy(ss,c);
			printf("%s\t",ss); -ок
			p->s[p->n]=ss;//присваиваем МУ
			printf_s("%s\t", p->s[p->n]); -ок
			p->n++;
			if(p->n==N)
			exteud(p); //проверка на переполнение
			return;
		}
		p->n++;
			insert(p->l,c);
			insert(p->r,c);
	}
void main(){
		tree *ph=new tree;
		char c[50];
		int rt;
		int m;
		int lvl=0;
		ph->creat();
		FILE *fd=fopen("asd.txt","r");
		while(!feof(fd))
		{
			fscanf(fd,"%s",c);
		    insert(ph,c);	
		}
}

Последний раз редактировалось Akkoks; 10.06.2011 в 22:13.
Akkoks вне форума Ответить с цитированием
Старый 11.06.2011, 15:12   #2
Akkoks
 
Регистрация: 10.06.2011
Сообщений: 3
По умолчанию

Елки палки, мистика какая-то...
Akkoks вне форума Ответить с цитированием
Старый 11.06.2011, 20:17   #3
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Код:
void create(char** s0,int n0){
	r->l=NULL;
	n=n0;
	s=s0;
}
Почему char ** в первом параметре, если вы передаете туда char *?
Код:
s=s0;
Серьезно? Если вы собрались скопировать строку, то вам незачем char ** и простым присваиванием вы ничего не скопируете. strcpy вам в помощь.

И вообще - юзайте std::string.

В любой среде разработки есть нормальный отладчик. Нафига вы printf выводите? Брейкпоинт ставите и вперед.

Последний раз редактировалось MaTBeu; 11.06.2011 в 20:20.
MaTBeu вне форума Ответить с цитированием
Старый 12.06.2011, 13:43   #4
Akkoks
 
Регистрация: 10.06.2011
Сообщений: 3
По умолчанию

во-первых передаем мы таки как раз char**
p->l->create(p->s,p->n);
т.к. в структуре дерева: char **s;
во-вторых я уже нашел ошибку и она не очень связана с ДМУ а скорее с опиской...
create(char **s0,int n0){
r=l=NULL; - вот так надо было.
в-третьих брек-поинт не помог бы, т.к. ту тесть рекурсивные вызовы, а с принтом все упрощается в разы.
Akkoks вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с передачей( фтпуд17 Свободное общение 5 27.01.2011 11:23
Проблема с передачей данных tools Общие вопросы C/C++ 5 25.12.2010 14:49
проблема с передачей параметров Mira-girl Общие вопросы по Java, Java SE, Kotlin 2 22.11.2010 23:59
Проблема с передачей файла BleStaR C++ Builder 1 15.02.2010 20:37
Проблема с передачей куки arwm Работа с сетью в Delphi 7 28.12.2007 23:44