У меня есть некоторый C-код, где указатель размещается и возвращается в функцию родительского вызывающего / родительского. Используя GDB, я заметил, что распределение указателей в порядке, но когда я его возвращаю, он теряет старшие биты первых четырех байтов адреса. В основном это выглядит так:
allocate pointer A
allocate pointer B
Free A
Return B
Теперь, если я изменю это на:
allocate pointer B
allocate pointer A
Free A
Return B
Все работает отлично. Что странно, так это то, что этот код работал отлично в течение 5+ лет, и теперь он доставляет нам проблемы в некоторых очень специфических случаях. Нас беспокоит то, что адрес изменился, мы не смогли обнаружить эту ошибку каким-либо другим способом, только когда мы подключили gdb и начали осматриваться, мы увидели изменение.
Кто-нибудь здесь видел нечто подобное или знает, почему это происходит? Кстати, мы не пытаемся записать больше, чем мы можем обработать в A или B, оба буфера имеют правильный размер для данных.
Заранее спасибо за любую подсказку.