Я работаю в Linux (CentOS 7.4, компилятор Clang) и получаю ошибку сегментации ( не , легко воспроизводимую) в объекте структуры C ++.Это член класса полиморфного объекта, который я не выделяю, но создается в рамках, к которому у меня нет исходного кода.Это означает, что я не могу скомпилировать с использованием sanitize легко, и Valgrind увеличивает время инициализации с секунд до 5 минут):
// C is allocated within a third party framework, I assume they use new()
//
class C : public ThirdPartyParentClass
{
S s;
}
struct S
{
.
std::mutex _mutex;
.
};
ошибка сегментации повреждает _mutex
.
Поэтому я добавил буфер символовтаким образом я мог видеть повреждение:
struct S
{
.
char _buffer[1000];
std::mutex _mutex;
.
};
, и я могу видеть поврежденные байты, когда происходит ошибка сегментации.Однако я не могу определить , когда происходит повреждение.
Чтобы определить, когда происходит повреждение, я бы хотел защитить байты буфера символов.Я попытался:
struct S
{
S()
{
mprotect(&_buffer[0], 4096, PROT_NONE);
const int test = buffer[0]; // Trigger seg fault to test it works
}
.
char _buffer[4096]__attribute__((aligned(4096)));
std::mutex _mutex;
.
};
, но мой тест для определения защиты памяти работает, не вызывает ошибку сегмента.
Может кто-нибудь помочь?