Я прочитал пару потоков об этой ошибке Valgrind, большинство из которых дают локализованные ответы. Я хотел бы точно знать, что не так, чтобы я мог самостоятельно отлаживать эти ошибки в будущем.Понимание «Недопустимое чтение размера n»
Я буду размещать только соответствующий код, если кто-то хочет больше я вывешу, что тоже ..
Так у меня есть Invalid read of size 4
на этой линии:
int t = (p->acts+p->ac)->time;
Примечание указатель арифметика, который я думаю, может быть связано с ошибкой ??
я получаю ту же ошибку на этой линии, доступ к тому же члену:
next->time = next->acts[next->ac].time;
Как я подхожу отладкам это .. программа работает нормально, но я хочу знать, что происходит.
Прошу прокомментировать, если вам нужна дополнительная информация.
Или что 'next-> act' был выпущен обратно во время выполнения и, хотя разыменование все еще« работает », это неопределенное поведение. В любом случае, это плохо. – WhozCraig
Интересно, что это не вызывает ошибку seg !? – jsj
Вероятно, это не вызовет SIGSEGV, потому что он ** является ** (или был) действительным указателем. Неопределенное поведение заключается в том, что вы понятия не имеете, к чему используется доступ к памяти, к которой вы обращаетесь (вы ее не владеете и понятия не имеете, если что-либо еще или вообще используется в памяти). Неопределенный характер заключается в том, каковы последствия его манипулирования могут быть ... помните, что запись за конец буферов - это обычная хакерская техника (хотя обычно они нацеливаются на переменные стека при этом) –