Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массив меняется сам по себе! 
:(
    Опции темы
CPlusPlusFAN
Дата 22.3.2006, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 1.11.2005
Где: Воронеж

Репутация: нет
Всего: нет



Здравствуйте все!

То, что только что произошло - выше моего понимания!
Приведу сразу пример, из которого всё будет понятно:
Код

typedef char (table)[3][3];
typedef char (TList)[9];

struct TTree
{
char x0,y0;
TTree *L,*R,*T,*B,*parent;
};

struct TStep
{
table* Table;
TTree* Node;
TStep *next;
};

void Copy(table& dest,table src)
{for (char i=0;i<3;i++)
 for (char j=0;j<3;j++)
 dest[i][j]=src[i][j];}

int CalcCount(TList list);

int TableToInt(table* arg,TList* Diagram,int Arrange);

void NIL(TList &arg)
{for (char i=0;i<9;i++) arg[i]=0;}

void WriteDiagram(table arg,TList& res)
{NIL(res);
 for (char i=0;i<3;i++)
 for (char j=0;j<3;j++)
 res[arg[i][j]]++;}

void Build(table* st,table* fin,char x0,char y0,ofstream& outp)
{
TList Diagram,Dtemp;
WriteDiagram(*st,Diagram);
int arrange,finIndex,index;
arrange=CalcCount(Diagram);
finIndex=TableToInt(fin,&Diagram,arrange);
index=TableToInt(st,&Diagram,arrange);
if (index==finIndex) outp<<'0'; else
{
bool *Array=new bool[arrange];
for (int i=0;i<arrange;i++) Array[i]=i==index;
TStep *Start=new TStep;
TTree *Head=new TTree;
Head->L=0L;Head->R=0L;Head->T=0L;Head->B=0L;Head->parent=0L;Head->x0=x0;Head->y0=y0;
Start->Table=(table*)new table;
Copy(*Start->Table,*st);Start->Node=Head;
Start->next=0L;
bool stop=false,empty=false;
char lastx,lasty;
TStep *temp;
while (!stop&&!empty)
{ temp=Start;
  empty=true;
  while (temp&&!stop)
  { table *copy;
    TStep *L=0L,*R=0L,*T=0L,*B=0L;
    char x10=temp->Node->x0,y10=temp->Node->y0;
    Copy(*copy,*temp->Table);

    if (x10<2)//вот тут происходит странность
.....
}


Пусть имеется массив Diagram, при выполнении процедуры WriteDiagram он заполняется единицами. Далее он никак не трогается и вплоть до последнего вызова Copy(*copy,*temp->Table); он остаётся неизменным, а после выполнения процедуры последний элемент массива (всё тот же Diagram) невообразимо
меняется на 0(???)

Во избежании лишних вопросов, вот тут:
Код

int TableToInt(table* arg,TList* Diagram,int Arrange);

в этой процедуре я не присвайваю нигде указатель на Diagram, а копирую его поэлементно.
PM MAIL ICQ Jabber   Вверх
darkart
Дата 22.3.2006, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: 2
Всего: 31



Опять пятнашки?
PM MAIL WWW ICQ Skype GTalk   Вверх
CPlusPlusFAN
Дата 22.3.2006, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 1.11.2005
Где: Воронеж

Репутация: нет
Всего: нет



Цитата(darkart @ 22.3.2006, 21:00 Найти цитируемый пост)
Опять пятнашки?

Я же не алгоритм спрашиваю и не прошу решить, а прошу помочь разобраться.
PM MAIL ICQ Jabber   Вверх
CPlusPlusFAN
Дата 22.3.2006, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 1.11.2005
Где: Воронеж

Репутация: нет
Всего: нет



Извините все!
Я просто стормозил! Я понял, что мне далеко ещё до профи. Вы, скорее всего, таких ошибок не допускаете. Проблема была вот тут:
Код

table *copy;//строка 60

Указатель-то я объявил...А на что он указывает??? Ни на что! Этот самый указатель, видимо, и залазил на массив Diagram...
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0650 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.