LINUX.ORG.RU

Извините, но мне бы полный текст программы, с прототипами функции, а то указатели я еще не совсем понимаю. И еще - если не сложно - можно ли поучить какие-нибудь комментарии по этой фунцкии что есть malloc и как фунцкция работает?)

anonymous
()

Извините, но мне бы полный текст программы, с прототипами функции, а то указатели я еще не совсем понимаю. И еще - если не сложно - можно ли поучить какие-нибудь комментарии по этой фунцкии что есть malloc и как фунцкция работает?)

anonymous
()

Извините, но мне бы полный текст программы, с прототипами функции, а то указатели я еще не совсем понимаю. И еще - если не сложно - можно ли поучить какие-нибудь комментарии по этой фунцкии что есть malloc и как фунцкция работает?)

anonymous
()

Ну, информацию по поводу malloc можно прочитать выполнив команду man malloc. А полный текст функции?.. Он и так достаточно полный (правда с ошибками - после malloc должны быть круглые скобки, а не квадратные). Если четко сформулируешь постановку задачи, можно будет и функцию поподробней расписать. :)

Akan
()

Если на С++, то очень просто -
#include <string>

std::string function ()
{
return "Hello, world!";
}

justme
()

Не знаю на счет malloc, а на ++ вообще-то оператором new пользуются или я ничего не понимаю - подскажите ?

anonymous
()

В libc уже есть функция дублирования строк:
char *strdup(const char *src);
Это для си. А с с++ тебе (автору вопроса), IMHO, рано пока еще дело иметь. Си все-таки попроще для начала.

nobody ★★
()
Ответ на: комментарий от Akan

2Akan: не недо толкать человека на неправильный путь.... Функция возвращающая указатель на ей же выделенный буффер - хреновая функция. void my_func( char* pszBuffer, size_t nBufSize ) { strncpy( pszBuffer, "string" , nBufSize ); *( pszBuffer + nBufSize - 1 ) = 0; /* на случай, если буффер оказался маловат */ } .... char szTemp[ 1024 ]; my_func( &szTemp, sizeof( szTemp ) ); ---- так и быстрее и надёжнее.

anonymous
()
Ответ на: комментарий от anonymous

Сорри...естественно
my_func( szTemp, sizeof( szTemp ) ), а не
my_func( &szTemp..... )

anonymous
()
Ответ на: комментарий от anonymous

Сорри...естественно
my_func( szTemp, sizeof( szTemp ) ), а не
my_func( &szTemp..... )

anonymous
()
Ответ на: комментарий от nobody

2nobody (*) : а вот Страуструп рекомендует не изучать C до C++.....

anonymous
()

Ай эм сорри, не увидел,честно говоря, что спрашивалось о С++... Поэтому лабал для С. И хотелось бы возразить 2anonymous, который раньше возразил мне по поводу "толкания человека на неправильный путь"... :)
Так вот, функция, возвращающая указатель на ей же выделенный буфер совсем не хреновая функция, если следишь за указателями. Вот такой пример:

........

void main(void)
{
char *localStr;
localStr = my_func();
...
free(localStr);
}

char *my_func(void)
{
char *Str = (char*)malloc(n),
strcpy(Str, "bla-bla-bla");
return Str;
}

.........

И никаких проблем. :)
А если дело касается С++, то нужно поменять malloc/free на new/delete и почитать о том, что такое классы, и как с ними работать... :)
Akan

Akan
()

A vot gradi booch rekomenduet ne smotret dazhe na realizaciyu klassa a tolko na interface a dvornik vasya rekomenduet vsem prodat mashiny chtoby emu proshe bylo i t.d. eshe takoe variant mozhno predlozhit :
char * foo() {
static char buf[]="blablabla";
return buf;
}
(kstati tak ne-reentran ctime delaet :) )

master
()

2master Проблема возникнет, когда ты попытаешься записать что-нибо в этот буфер (тот, что ты привел в пример), т.к. его выделяет в обласли констант. Хотя, может я и не прав - не знаю, как себя будет вести в этом случае буфер выделенный как STATIC char (естесственно маленькими буквами, я просто хотел подчеркнуть это слово). А для того, чтобы смочь работать с буфером, как с полноценным куском памяти (и читать из него и писать в него) нужен malloc. Кстати, если знатоки захотят кракнуть прогу, скомпиленную в С++, в которой используется new, то они увидят, что этот new в свою очередь вызывает malloc. :)

Akan
()

Зачем крякать, достаточно исходники operator new посмотреть.

А в винде malloc в свою очередь вызывает HeapAlloc :)

Havoc ★★★★
()

2Akan :
Problema snimaetsya tak :
vector<char> buf; ,chto po suti i est tip string.
I eshe, esli delo kasaetsya C++ ( kak tyi skazal ), to nikakih
strcopy i char* tam v podavlyaushem bolshinstve slucheav ne nado, dlya
etogo suchestvuut metodyi C++, a ne C.

2avtoru
smotri otvet justme, samyii tolkovyii

anonymous
()
Ответ на: комментарий от Akan

Ну ну, следи за указателями, только потом не спрашивай malloc debugger получшее где брать. Давить тупой язычок Цэ за эти ублюдочные указатели. И Цэ++ тоже давить.

anonymous
()

2последний anonymous: с такими репликами лучше не соваться. Во всяком случае, не инкогнито... Если ручки не оттуда растут да головка не варит - это свои собственные проблемы и совсем не проблемы языка программирования или дебагера...
Если ты не умеешь управлять самолетом, то не кричи, что самолеты плохой вид транспорта, потому что часто падают...

Akan
()
Ответ на: комментарий от Akan

Язык программирования на такие вещи очень даже влияет. Обсуждение этого, правда, обычно перерастает во флейм насчёт использования garbage collector'а. Хотя я сам бы был не против поучаствовать в таком флейме...
Я не думаю, что человек может всегда помнить про все указатели во всех программах, им написанных.
Кстати, есть полно всяких статей, в которых написано, что в программах на Аде ошибок в несколько меньше, чем в программах на С/C++ (конкретные цифры - 4-12), и я ещё не видел статьи, которая бы это оспаривала. Может кто покажет? ;-)

justme
()
Ответ на: комментарий от justme

Я не спорю и в курсе Сишных проблем, т.к. постоянно их имею... Просто последний "анонимный товарищ" по-детски как-то наехал, аж читать стыдно было... :)

Akan
()

2Akan:
static char buf[] = "blablabla"; в константы не уйдет, то-же самое касается определения без static.
А вот static char * buf = "blablabla" уйдет в константу, и тогда действительно проблемы при записи возникнут. В мастеровском примере проблема одна - функция будет возвращать один и тот-же указатель при каждом вызове (что, впрочем он и написал ниже своего примера).
А насчет вопроса - IMHO самый правильный ответ привел justme.

timur
()
Ответ на: комментарий от Akan

Если кто не догадался - я vsl. Просто после очередного запоя я напрочь пароль забыл... Короче, прежде чем защищать ублюдочные язычки C/C++ - посмотри на любую крупную софтину, на них писанную. К примеру, на XFree86. Если ты там никогда не ловил лики - твои проблемы. Кстати, они даже с собой собственный malloc debugger таскают для этой цели - и это ж-ж-ж не просто так - там не ламеры сидят, знают, что делают. Так что, ламеришко, умерь свой пыл, и задумайся, так ли хороши указатели, если от них вреда немерянно, а польза весьма сомнительна - альтернативные решения сплошь и рядом оказываются гораздо более удобными и безопасными.

anonymous
()

2anonymous (*) (2001-03-09 16:25:04.0): Данке шон, посмотрю.

justme
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.