Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Флейм (http://www.flasher.ru/forum/forumdisplay.php?f=7)
-   -   Ещё чуть-чуть С'ей++ (http://www.flasher.ru/forum/showthread.php?t=24225)

MyXus 09.12.2001 03:02

О, ребяты! 8-#
Этого класса злобного я отовседа поубирал, и многое ожило! Раньше падение проги скрывало многие интересности, както:
now=new class DATA; выполняется 2 раза, на 3..n now получает адресс предыдущей ячейки списка.. уж чё я с ним не делал.
Нашёл где основная собака зарыта - если не считать отрубленного конструктора и дохлого "new class DATA" то очевидно, что строка strcpy(str,D->Nnow->name); - и есть мой найтмаре. 8-))

(продолжаю уверять всех, что до момента падения все переменные содержат свои данные в целости и сохранности)
Как это лечится? ... меня во вторник расстреляют если это не заработает.

nme 09.12.2001 04:15

Ну ты всётаки даёшь!
 
Поражаюсь тому, что ты всё приходишь и приходишь на этот форум с этим вопросом! Но я тебя понимаю! Я тоже ФАНАТ flasher.ru! :cool:
Насчёт вторника, это плохо... :(
Так, а теперь по делу: Возьму для примера конец конструктора, ну думаю код ты и сам узнал. Там у тебя все меню описываются похоже и imho с ошибкой.
Код:

basemenu=new char*[3];
for(i=0;i<3;i++)
basemenu[i]=new char[27];
strcpy(basemenu[0],"Справочник названий фирм");
strcpy(basemenu[1],"Справочник телефонов ");
strcpy(basemenu[2],"Справочник адресов ");

addmenu=new char*[2];
for(i=0;i<2;i++)
addmenu[i]=new char[27];
strcpy(addmenu[0],"Добавить запись ");
strcpy(addmenu[1],"Редактировать таблицу ");
}

Так вот, в С++ Обьявление char* эквивалетно char[]. Таким образом, у тебя addmenu=new char*[2]; эквивалентно
addmenu=new char[][2]; Получается, что следующий за объявлением цикл не нужен.
Код:

for(i=0;i<2;i++)
addmenu[i]=new char[27];

Это только повторение, ведь addmenu[1]==addmenu[2]==char[]; И сразу м-но писать:
Код:

strcpy(addmenu[0],"Добавить запись ");
strcpy(addmenu[1],"Редактировать таблицу ");

Может у тебя где-то тут память теряется за кучу лишних переприсваиваний? А может я и не прав. Совсем ведь давно С++ не занимался. Вощем смтри. ;)
Удачи!

MyXus 09.12.2001 14:12

2 nme После твоего варианта у меня комп виснет 8-)

Пипль! Я нашёл обшибку. Вот она. (в комментариях)

if(a==13) {
if(type==1) { D->Nnow=D->Nbegin;
for(i=0;i<(s_pos-1)+dif;i++)
D->Nnow=D->Nnow->next;
/*strcpy(str,D->Nnow->name);*/ }
if(type==2) { D->Pnow=D->Pbegin;
for(i=0;i<(s_pos-1)+dif;i++)
D->Pnow=D->Pnow->next;
/*strcpy(str,D->Pnow->phone);*/ }
if(type==3) { D->Anow=D->Abegin;
for(i=0;i<(s_pos-1)+dif;i++)
D->Anow=D->Anow->next;
/*strcpy(str,D->Anow->addr);*/ }

Я десяток часов убил, чтоб узнать на 99%, что моя проблема - это ctrcpy() !!!!! Кто хоть что то понимает - посмотрите, подумайте - что можно проверить, какние несоответствия может вызвать эта больная функция. А я пока свой собственный strcpy напишу 8-)

MyXus 09.12.2001 14:25

Свой собственый strcpy() не спас. Чушь какаято...

MyXus 09.12.2001 16:28

Всё, победа.. мать моя. Сколько мучений.
Оказалось - gettext() - puttext()
buffer необходимый ему считаеться как 2байта*Х*У , весь экран - это 80*25*2 - 2000 байт. или 1000 int.
Я заказываю 1000 инт - всё падает, я кладу 2000 инт - всё пашет - я успакоился и забыл. Щас методом тупого вырубания строк программы одну за одной нашёл, что падаем мы на этих уродах. Я беру, и леплю максимально используемые щас значения Х и У - получаю 61*19*2. Ставлю. Работает. Сукиииииииии 8-#
А когда мненадо будет не 61 а 62 опять всё упадёт??

Countach 09.12.2001 16:44

Такое ощущение что ты сам себе рассказываешь, блин может я просто оч перегружен своим Г. но очень мало понял из твоей проги. :D
То стоит, то не стоит, то ваще падает :rolleyes:
Что за прога

ЗЫ сори за оффтоп
Блин у тебя что С++ любимый язык??? Просто не которые люди любят тараканов ядерными бомбами. А ты как??

MyXus 09.12.2001 17:01

Прога - БД.
А меня так бросает - то в жар то в холод - т.к. при работе с памятью прога падает в совершенно случайный момент и имеет не связанные с источником, на первый взгляд, последствия.
С++ - другого не знаю, да мне и нельзя - это курсовик, где С++ условием поставлен. А что ещё можно? я б билдер поучил - пусть меня научат. Столько всего я бы поучил! 8-))) Время только......

Countach 09.12.2001 17:11

ЗЫ у меня еще хуже :)

LISP, ASM, RTL - для романтики :D
C, C++ - для понта
Pascal - придурки в институте учат :(
Ada - так сам пока не понял
JScript, Flash5 AS - для веба

Зы может че забыл :)

ssj 10.12.2001 22:18

эээ...ммм...с каких пор 80*25*2=2000?

MyXus 11.12.2001 00:23

гых, обзнался 8-)
серано ни на 1000 ни на 2000 не работает 8-)

А вот мож тут кто подскажет ишшо - есть массив n мерный.....
Ну короче на простом примере

a[2][2];
как мне узнать - сколько строк в массиве "а"?
для столбцов зделаю strlen(a[0]), а как быть со строками?


Часовой пояс GMT +4, время: 12:56.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.