Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.037 c
7-1073478461
Mnch
2004-01-07 15:27
2004.05.02
DOS-программа и USB-RS232


3-1080982304
sssss
2004-04-03 12:51
2004.05.02
Create Table


3-1081249521
Leech
2004-04-06 15:05
2004.05.02
Oracle... что в имени твоем....


9-1068714034
Хранитель_7К
2003-11-13 12:00
2004.05.02
Странно все это...


1-1081959109
msguns
2004-04-14 20:11
2004.05.02
Глюк в стрингриде ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский