LINUX.ORG.RU
Ответ на: комментарий от Inco

Возможно это прозвучит странным, но стоит использовать мозг. Ты передаешь функции указатель на область памяти, в которую она должна записать что-то. При этом чтобы не повредить другие данные указатель должен указывать на область памяти, которую ты не используешь для других целей и размер этой области достаточен. Ты же передаешь в read случайный указатель и на твоё счастье он оказался совсем некорректным (скорее всего этот адрес не входит в адресное пространство твоего процесса), в худшем случае read завершился бы успешно, повредив какие-нибудь данные, которые с этим read'ом никак не связаны.

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

Спасибо, возможно это прозвучит странно, но почему так нельзя делать?

char* foo это указатель, а не сама строка. Он должен куда-то ссылаться. Если его не инициализировать, то он будет ссылаться совсем не туда, куда следует.

Решение:

char* foo = calloc(LENGTH, sizeof(char));

После использования не забывай делать free(foo).

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

Потому что автор студент и просто выполняет что сказали.

Stahl ★★☆
()
Ответ на: комментарий от Extraterrestrial

char * message = malloc(3);

А потом люди удивляются фрагментированию кучи и адовым тормозам.

ТС, для небольших массивов в юзерспейсе юзай стек.

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

о чём ты? тс наверняка не знает, что такое юзерспейс и стек, а ты ему про фрагментацию кучи.

Ну так пусть почитает.

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

Спасибо за разьеснения, признаюсь очень сильно сглупил

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

Да я и не огорчился. Меня больше огорчает твой char *message; read(..., message,...); Это ты как-будто в школе в слове „шишки“ ошибку сделал.

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

Самому стыдно, но теперь этот момент я запомню на всю жизнь

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