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 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.