Shit code

Nov 12, 2013 17:19

17:19 12.11.2013

Shit code

Found in current project such remarkable thread body:

void* socket_handle ( void* thread_params )
{
int client_socket_int;
int* client_socket = &client_socket_int;

int* real_client_socket = reinterpret_cast( thread_params );
client_socket_int = *real_client_socket;
delete real_client_socket;
//
// ( Read more... )

Leave a comment

Comments 4

lazybear November 13 2013, 07:28:56 UTC
Не ну а чего такого. Чисто теоретически и технически такой код может иметь смысл. Если за удаление ресурсов отвечает тот кого вызывают (а не тот кто вызывает). Или что тебя смущает? Отсутствие проверки на NULL?

Reply

lazybear November 13 2013, 07:32:58 UTC
Хотя последний delete достаточно странный. :) Может там тоже должно быть *client_socket. Хотя я даже не знаю можно ли delete сделать от int. А код не падает на последнем делете?

А вообще хороший совет - перестать читать чужой код перед обедом. ;) Такого начитаешься.

Reply

sermp November 13 2013, 13:44:18 UTC
Последний delete роняет все, т.к. удаляет переменную, которая на стеке.

Чужой код приходится читать на текущем проекте. Как раз искал где падает код. А так как там ещё были проблемы с асинхронностью, то до этого места не всегда даже доходило =)

Reply

lazybear November 13 2013, 13:47:22 UTC
Ну странно тогда. Если этот указатель нигде внутри не перезаписывается, тогда он всегда должен падать. Как тогда вообще запускали этот код. Может там внутри что-то когда-то менялось. Других версий нету. Ну кроме того что автора явно прёт от разыменования указателей. ;)

Reply


Leave a comment

Up