Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

Кто-нить программил на Си++   Найти похожие ветки 

 
Voland2000   (2004-04-12 16:43) [0]

Здрасть, кто программил на Си++ (BC 3.11) ,пожалуста, отставьте свой e-mail.


 
Игорь Шевченко ©   (2004-04-12 16:51) [1]

Новый вид спама ?


 
Тимохов ©   (2004-04-12 16:56) [2]

Уважаемый программист на СИ.

Предлагаем вам новый продукт - дельфи. Пишите на нем.

Если прилете 10 адресов дригих программистов на си, исключим вас из данной рассылки.


 
Anatoly Podgoretsky ©   (2004-04-12 16:58) [3]

Может он для этой цели и хочет :-)


 
clickmaker ©   (2004-04-12 16:59) [4]


> Voland2000   (12.04.04 16:43)

Открываешь кружок по интересам ?


 
TButton ©   (2004-04-12 17:03) [5]

да.


 
TButton ©   (2004-04-12 17:04) [6]

я более чем уверен, что "кто программил на Си++", иначе мы бы о нем не знали =)


 
serge35   (2004-04-12 17:06) [7]

А может еще 100 р. по почте прислать?


 
clickmaker ©   (2004-04-12 17:11) [8]


> serge35   (12.04.04 17:06) [7]
> А может еще 100 р. по почте прислать?

На развитие клуба любителей Си++.


> Voland2000   (12.04.04 16:43)

На открытии клуба, кстати, халявное пиво будет ?


 
TButton ©   (2004-04-12 17:16) [9]

Удалено модератором
Примечание: Offtopic


 
Voland2000   (2004-04-13 04:48) [10]

Ну, ладно тогда я оставлю свой вопрос здесь:
Вот функция (на Си++). Она должна добавлять строку (str) под номером (num) в массив dates:
void AddtoArray(char *str,int num){
char *stradd;
char **newarray;
int x,x1,adding_el;
adding_el=0;
newarray=(char **)calloc(size+1,sizeof(char *));
  x=0;
  x1=0;
  while (x<=size){
   if (x!=num || adding_el==1){
    stradd=dates[x];
    newarray[x1]=(char *)calloc(strlen(stradd)+1,sizeof(char));
    strcpy(newarray[x1],dates[x]);
    x++;
    x1++;
   }
    else {
     stradd=str;
     newarray[x1]=(char *)calloc(strlen(stradd)+1,sizeof(char));
     adding_el=1;
     strcpy(newarray[x1],str);
     x1++;
    }
  }
size++;
dates=(char **)calloc(size,sizeof(char *));
for (x=0;x<=size;x++){
 stradd=newarray[x];
 dates[x]=(char *)calloc(strlen(stradd)+1,sizeof(char));
 strcpy(dates[x],newarray[x]);
}

for (x=0;x<=size;x++){
 free(newarray[x]);
}
free(newarray);
}

Но, вот где-то здесь большой косяк.
Пожалуйста, очень надо.


 
Паниковский ©   (2004-04-13 06:46) [11]

IMHO
newarray[x1]=(char *)calloc(strlen(stradd)+1,sizeof(char));
1 ты не можеш изменить размер массива в realtime
2 ты выделил памяти размера char а не char*(лучше даже выделять char[256])
3 попробуй использовать не char** а void*
4 если ты хочешь все таки пользоватся именно char** то напиши функцию например такую
char** x;

AddString(char *newStr){
char** y;
y = (char**)calloc(strlen(stradd)+1,sizeof(x)+sizeof(newStr));
delete []x;
x = y;
return 0;
}

ну или что то около того


 
Suntechnic ©   (2004-04-13 06:59) [12]

>Voland2000   (13.04.04 04:48)
Во-первых привыкай писать комментарии иначе через время сам не разберёшься что здесь происходит. Теперь по коду....
То, что сразу бросается в галаза: Здесь не весь код приведен и не видно что есть size и dates, но судя по логике... что будет, если изначально dates пуст и size == 0? Я тебе расскажу, что будет... вылетишь на второй итерации. Далее... прежде, чем присваивать dates новое значение (dates=(char **)calloc(size,sizeof(char *));), надо сначала освободить память от предыдущего (если оно там было конечно), иначе это прямая дорога к memory leaks.


 
Suntechnic ©   (2004-04-13 07:10) [13]

>Voland2000  
И ещё. Вот в этих последних двух for (x=0;x<=size;x++) вылетишь ещё разок, так как выскочишь за пределы массива. Ты сделал уже size++, так что он соответствует размеру newarray и x<=size выскакивает за его предел.


 
Suntechnic ©   (2004-04-13 07:28) [14]

>Voland2000  
Кстати ты ещё что-то там со счётчиками перемудрил в цикле while. Не будет так работать.

>Паниковский ©
1 ты не можеш изменить размер массива в realtime
No comments

2 ты выделил памяти размера char а не char*(лучше даже выделять char[256])
Он выделили массив под хранение массива, поэтому и char *.

3 попробуй использовать не char** а void*
Гениальный совет по своей сути.

4 если ты хочешь все таки пользоватся именно char** то напиши функцию например такую
char** x;

AddString(char *newStr){
char** y;
y = (char**)calloc(strlen(stradd)+1,sizeof(x)+sizeof(newStr));
delete []x;
x = y;
return 0;
}


Это вообще бред какой-то.


 
Паниковский ©   (2004-04-13 07:43) [15]

Suntechnic
>>4
я в свое время тоже самое делал только я массив по новой выделял и копировал на старый массив и все нормально работает


 
Паниковский ©   (2004-04-13 07:47) [16]

Suntechnic
во всяком случае под TC3 BC45 BC502
вариант с копирование проходил и без ошибок


 
Suntechnic ©   (2004-04-13 07:54) [17]

>Паниковский ©
>>4
я в свое время тоже самое делал только я массив по новой выделял и копировал на старый массив и все нормально работает


Я могу несколько подсократить твой код для Win 32 платформы чтобы проще было:

char** x;

AddString(char *newStr){
char** y;
y = (char**)calloc(strlen(stradd)+1, 8);
delete []x;
x = y;
return 0;
}


После выполнения этого кода по адресу x будут лежать нечто ужасное размером равным длине строки stradd + 1 и размерностью 8 байт.


 
Паниковский ©   (2004-04-13 08:04) [18]

Suntechnic
я код не точно воспроизвел
исходник сейчас вообще черт его знает где
поэтому я примерный вариант кинул
кароче Склифасовский мое сообщение
начинается с IMHO т.е. обрати внимание


 
MPS ©   (2004-04-13 09:14) [19]

Voland2000   (12.04.04 16:43)  
Здрасть, кто программил на Си++ (BC 3.11) ,пожалуста, отставьте свой e-mail.


Здрасть! Я програмил, програмлю, и всегда буду програмить на С++. Только среду ты выбрал плохую для програмканья. Советую VC++, билдер это просто игрушка. Я это уже понял. Е-Маил: p.maxim@mail.ru


 
N170   (2004-04-13 09:43) [20]

Кстати, зачем автору ветки ваши e-mail-ы?
Задумайтесь. Большой Брат не с++пит.


 
Nikolay M. ©   (2004-04-13 10:11) [21]


> for (x=0;x<=size;x++){

Таки нужно x<size. Или не делать size++ с соотв. правкой остальных строк.


> size++;
> dates=(char **)calloc(size,sizeof(char *));
> for (x=0;x<=size;x++){

Утечка памяти, теряется старый массив dates. Почему бы просто не сделать realloc?
Да и вообще, на самом деле, уничтожаешь старый dates, как уже сказали: delete []x и переприсваиваешь указатель: dates = newarray. Зачем эти премудрости с копированием из нового массива в старый и освобождение нового массива?


 
Anatoly Podgoretsky ©   (2004-04-13 10:25) [22]

Засланцы среди нас


 
Voland2000   (2004-04-13 16:34) [23]

Спасибочкис, но вот только я что-то боюсь вы думаете, что я от удовольствия на Си начал программить. На самом деле из всех языков на которых я программил(а их было много) Си является самым худшим, а по поводу выбора среды, то мне так сказали.


 
Polevi ©   (2004-04-13 16:58) [24]

>из всех языков на которых я программил
список огласи, и преимущества перед си


 
Voland2000   (2004-04-13 17:12) [25]

Пожалуйста:
1)Basic-очень удобен для начинающих и прост в обращение, хотя на нем я писал достаточно серьезные проги.
2)Pascal-самый лучший из языков. Понятный синтаксис, много функций, удобная среда.
3)Perl-хоть и является "продолжением Си", но с другой стороны имеет кучу функций по работе с массивами и гораздо удобней, чем Си.
4)Delphi(Delphi и Pascal-разные языки).Ну, тут и сравнивать нечего.
5)Assembler-без коментариев.


 
Anatoly Podgoretsky ©   (2004-04-13 17:48) [26]

Не это не засланец, похож на нашего человека, наоборот его заслали на воспитание во вражесткий лагерь, вот теперь парень и мучается.



Страницы: 1 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.027 c
4-1078422810
Владимир Б
2004-03-04 20:53
2004.05.02
Токен доступа в Win2000


7-1078346240
Дас Виндовс 45
2004-03-03 23:37
2004.05.02
Шрифты


3-1080820167
Vitaly
2004-04-01 15:49
2004.05.02
Oracle + dbf


1-1081772016
ss300
2004-04-12 16:13
2004.05.02
Обработка TEdit


1-1082110062
Ivolg
2004-04-16 14:07
2004.05.02
Часы