LINUX.ORG.RU
ФорумTalks

освобождение памяти

 


0

5

освобождаю массивы структур таким образом, появляется double free or corruption

struct list *d;
struct list *pt;
for ( int h = 0; h < height; h++ )
{
  for ( int w = 0; w < width; w++ )
  {
     pt = &total_list [ h ] [ w ];
     while ( pt )
     {
        d = pt;
        pt = pt->next;
        free ( d );
     }
  }
}

Перемещено tailgunner из development

Ответ на: комментарий от u0atgKIRznY5

Но ты мне явно привел правила, которые описывают класс, который находится в глобальной области.

Что такое класс в глобальной области?

Где у тебя класс в глобальной области? У тебя его нет. У тебя вообще память на каждый член списка динамически выделяется.

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

люди пишут не дураки

Почему тогда появляются новые версии и исправления ошибок и улучшения производительности?

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

У тебя вообще память на каждый член списка динамически выделяется.

Ну код же понятен, это тебе не простенькие функции наподобии.

it.clear ();
it = new if ();

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

Новые версии STL? Они выходят с новой версией стандарта и включают в себя новые плюшки, которые привносит стандарт. А вот реализации STL вполне могут содержать ошибки, да. Как и Стандартная библиотека Си, к слову

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

Почему тогда появляются новые версии и исправления ошибок и улучшения производительности?

Этот процесс неизбежен. Или ты планируешь написать лучше чем у них? Люди десятелетиями улучшают свои либы, а ты руководствуешься принципом «раз у них ошибки, то вот я то сейчас точно лучше напишу!»

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

Ну код же понятен, это тебе не простенькие функции наподобии.

Я к тому что у тебя НЕТ глобальных переменных. Поэтому гарантии зануления членов тоже НЕТ.

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

К слову, эти простенькие функции гораздо лучше хотя бы потому, что сразу видна логика работы. В таких функциях гораздо проще найти ошибку как логики программы, так и интерфейсов. Например, если после вызова clear() нужно ещё и новый объект создавать, то очевидно, что либо функция clear() ведёт себя не так, либо у тебя ошибка. В портянке кода «всё в одном» это заметить гораздо сложнее

XMs ★★★★★
()
Последнее исправление: XMs (всего исправлений: 1)
Ответ на: комментарий от Dudraug

Да и как ты вообще понимаешь под словом умный. Люди пишут код, как знают. Потом начинает проверять безопасник код, и оказывается что множество уязвимостей в коде. Безопасности видимо инженеров не учили, поэтому всякое может быть. Вот ты например написал код, думаешь умный такой, а оказывается есть ошибки, и это плохо что так, вдруг стабильность кода очень важно. Хочешь писать для ядерного реактора код, будешь ли ты доверять чужому коду, или напишешь свою реализацию? Говорят, что каждый раз пишут свои реализации, когда как и так библиотек хватает. Но в том же png или в каком там формате. Помнишь обнаружили уязвимости в формате изображений, когда за просмотр картинки на странице можно было впустить удаленный код через библиотеку обработки изображений. Я вот например незнаю как либа такая написана, но люди которые знают, все равно допускают ошибки. Каждый свою роль выполняет, но не вместе. Так что, думаю что пора тебе отправлять свой код безопасникам. А то какой нибудь студент напишет фаззинг для твоей проги и обьявит всему миру, что ты не видишь в своем коде ошибок, когда вроде бы все логично.

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

Почему? Ты видишь только clear() и все. А в моем случае ты видишь как происходит освобождение памяти, здесь как раз удобней обнаружить ошибку.

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

А в моем случае ты видишь как происходит освобождение памяти,

Это ты просто реализацию free не видел.

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

А то какой нибудь студент напишет фаззинг для твоей проги и обьявит всему миру, что ты не видишь в своем коде ошибок, когда вроде бы все логично.

Ты опять начинаешь нести дичь. Хороший дизайн и хороший код не всегда означает, что код без ошибок. Но хорошие практики позволяют 1) сократить число ошибок; 2) быстро их обнаружить если бага была обнаружена; 3) максимально быстро и безопасно для других частей кода исправить ошибку.

Неужели у тебя настолько в голове каша, что ты не понимаешь таких простых вещей. Я в твоем коде увидел с десяток проблем, сразу. А ты пытаешься написать лучше, чем у других... У других хотя бы таких детских проблем нет.

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

Потому что видна логика. Раз есть clear(), создание нового объекта не нужно — у тебя и так пустой объект есть. А значит, либо функция clear() не делает того, что должна, что есть ошибка, плюс в этом случае ты ещё и утечку памяти получаешь, что тоже ошибка, либо следующей строки не должно быть, что тоже ошибка. Это видно сразу. В том и прелесть. А вот если у меня возникнут подозрения в реализации функции clear() — тогда уже я полезу в её код, и просматривать его будет гораздо проще, потому что там не будет лишнего. Другой вопрос, что просматривать её код может быть и не нужно. И в этом случае он не должен отвлекать внимание на себя, что неизбежно произойдёт, если не разносить

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

Теперь я понимаю что у каждого свои пожелания насчет написания кода.

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

Ладно ладно. Напиши над какими продуктами ты работаешь, которые безопасники даже код не проверяют ( потому что у вас денег на это нет ), чтоб я знал какие продукты содержат потенциальные уязвимости.

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

которые безопасники даже код не проверяют

Ты где такое вообще вычитал? Где я хоть слово сказал, что код не отдается безопасникам, что код у нас не тестируется. Приведи цитату. Я такого не говорил, ибо у тебя шизофрения.

потому что у вас денег на это нет

Мальчик, я работаю в очень крупной международной фирме и не тебе мне говорить о процессах.

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

Хорошо устроился. А какие продукты делаете? Ожидается солидный ответ, а не такого типа, ( мы делаешь хелло ворлды ).

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

Я читал в форензике, что люди обычно в своей фирме узнают об уязвимостях или делают лазейки в своей компании. Когда по новостям говорят что взломали хакеры, думается что кто-то из фирмы слил инфу. Думаю тебе интересна работа. Как ваша компания называется? Надеюсь ты не рассказывал никому о том, что можешь лазейку оставить?

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

Я читал в форензике, что люди обычно в своей фирме узнают об уязвимостях или делают лазейки в своей компании. Когда по новостям говорят что взломали хакеры, думается что кто-то из фирмы слил инфу

Похоже на чьи то домыслы и бредни. Хотя такое конечно тоже бывает, но возводить все в абсолют не стоит

Как ваша компания называется?

Это не имеет значение.

Надеюсь ты не рассказывал никому о том, что можешь лазейку оставить?

Я ничем таким не знаимаюсь и не собираюсь заниматься.

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

Это из опыта отдела к.

Ты, кстати, где и кем работаешь? У этих ребят к тебе накопилось несколько вопросов.

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

Ты, кстати, где и кем работаешь? У этих ребят к тебе накопилось несколько вопросов.

Я полагаю он студент младших курсов.

Dudraug ★★★★★
()
Ответ на: комментарий от i-rinat

Ты, кстати, где и кем работаешь?

Не хочу говорить об этом.

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

Который ты прочитал в интернете=)))

книгу читал.

Я полагаю он студент младших курсов.

не учусь в таких заведениях. Ума не хватило.

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

Говоришь плохой код, только из-за того, что тебе не привычно видеть. Это тоже самое что ты любишь например больше всего тефтели кушать с соусом, но соусом не поливать, а тефтели на соус ложить, и я тебе такой говорю, что за вид такой, что ты не можешь полить соусом чтобы красивее выглядело?

Зачем ты пытаешься мне писать эти херню? Ты действительно думаешь, что мне нечем крыть эту шаблонную ахинею, которую вы все друг за другом повторяете? Смешно.

Мало того, что аналогией не является рандомная херня, которую ты ею назвал, либо за неё выдал.

Никто тебе под/над не говорит. Всё очень просто - есть такая штука, как логика и целесообразность. И уже всё остальное исходит из неё.

И далее всё просто. Приходит какой-то лсный балабол, который не знает ни языка, ни матчасти, нихрена.

Это равносильно тому, что ты ешь не тефтели «сверху», а баланду из дерьма, оправдывая это тем, что «это твой выбор»/«вкус» - нет, это не твой вкус - это безвкусие.

Твой стиль - параша, ни одного елемента которого ты не обоснуешь. Ты пишешь херню - это объективная реальность. Спроси я тебя - зачем пробелы вокруг скобок - ты тут же обосрёшься. В этом все вы.

В общем то что ты там художественно поменял, на функционал это не повлияло, а значит код нормально написал.

Не, не. Функционал не изменило - дерьмо это еда. Пусть и дерьмовая, но еда. И ты жрёшь дерьмо.

Стиль - это не функционал. Возможность писать внятные конструкции - это не функционал. Хоть и функционал то же.

И если ты не можешь написать вменяемую конструкцию - то ты «не повлияло» - ты не можешь. А если не можешь и ещё несёшь ахинею - ты бездарность балаболящая.

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

Почему? Ты видишь только clear() и все.

Пиши header-only и не будет никаких проблем. Зачем ты пишешь на допотопной параше?

А в моем случае ты видишь как происходит освобождение памяти, здесь как раз удобней обнаружить ошибку.

Я тебя удивлю, но нихрена ты не видишь. Это такой же clear() и точно так же в нём ничего не происходит, но почему-ты его считаешь за «видишь сразу», а clear() - нет.

Как я уже сказал, когда твоя логика дырявая, когда тебя может сломать об коленку любой балабол - ты слаб. А раз ты слаб, то толку идти против системы? Идти надо уже после, а не до. А то дойдёшь только до помойки, а не до победы.

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

Это ты из-за своих ощущений так подумал? Что ты там пукаешь, будто понимаешь сколько лет по фразе.

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

Я вот каждый раз читаю и каждый раз удивляюсь. Как же одна, вроде другая балаболка, но так похожа на всех предыдущих. Вас там будто-бы по копирку штампуют. Одна и та же детсадовская ахинея от каждого нового эксперта.

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

Ты уверен что 29 лет,

Он сам так писал. Возможно, это просто придуманный персонаж и он его отыгрывает не всегда успешно.

i-rinat ★★★★★
()
Ответ на: комментарий от rustonelove

Одна и та же детсадовская ахинея от каждого нового эксперта.

Да он тут давно.

Dudraug ★★★★★
()

ТС, спасибо, проблевался от говнокода без подсветки и дурацкой проблемы. Я так скоро перестану сотку весить, у меня аж аппетит пропал.

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

Освобождение головы списка не стыкуется с его выделение в массиве:

total_list[i] = calloc ( width, sizeof ( struct list ) );
Надо положить в таблицу не «struct list», а «struct list *» или при удалении проверять, что это не голова.

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

Я так скоро перестану сотку весить, у меня аж аппетит пропал.

Я не смогу тебе постоянно так помогать, тебе нужно придумать как самому справляться с проблемой.

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

Я не смогу тебе постоянно так помогать, тебе нужно придумать как самому справляться с проблемой.

Не переживай, пока что ты очень хорошо справляешься.

i-rinat ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

я сильно опасаюсь, что твой «другой способ» так же ужасен и на самом деле не работает. у тебя принципиальное непонимание того, как устроены двумерные динамические массивы. тебе правильно советуют K&R читать. читать, причём несколько раз, и обязательно разбирать все примеры с динамическим выделением памяти.

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

В той книге не написано о двумерном динамическом массиве. Ну вы конечно даете, видимо не читали, раз советуете.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от i-rinat

Не переживай, пока что ты очень хорошо справляешься.

От моих проблем в коде даже польза для кого-то есть. Все равно, это все неправда, и раз уж обсуждают вид кода, значит привыкли к красоте. Я начисто искажаю их прекрасное понимание качественного кода. Это потому что я пока не привык к красоте и комфорту как некоторые, поэтому код выражает суть, а не отношение к читателю.

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

Ты сейчас троллишь или ты реально не понимаешь, чем плох твой код? Такое чувство, что у тебя полное непонимание этих пунктов:

1) Зачем нужно разделение на функции

2) Что такое тестирование

3) Зачем нужна инкапсуляция

4) Зачем нужна проверка значений перед использованием

5) Зачем нужен хороший код

У меня иногда возникает ощущение, что ты ролевой персонаж персонаж бородатого админа скучающего программиста без проекта.

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

этих пунктов:

Мне сейчас ничего на ум не приходит. Может ты ответишь на эти вопросы, так сказать поделишься опытом?

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

У меня иногда возникает ощущение, что ты ролевой персонаж

Такое же впечатление

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

он реально не знает ответы на эти вопросы. Ты его еще спроси что такое разработка тестированием.

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

Мне сейчас ничего на ум не приходит. Может ты ответишь на эти вопросы, так сказать поделишься опытом?

Делать мне больше нечего. Я тебе посоветовал книжки читать и прислушиваться к советам здесь, учить тебя программированию я не намерен.

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