LINUX.ORG.RU

С++, очень странные сегфолты

 , , , ,


0

2

Есть упрощённо такой кусок кода:

    data.recordedSamples = new float (m_buffer.get_frames() * m_buffer.get_channels());
    long l = m_buffer.get_frames() * m_buffer.get_channels();
    std::cout << l << std::endl; // 176400 в моём случае
    for(long int i = 0; i < l; i++ ) {
       std::cout << i << std::endl;
       data.recordedSamples[i] = 0;
}
Доходит каждый раз до ровно 36512 и вызывает сегфолт. catch (std::bad_alloc) не ловит. g++ и clang++ собирают одинаково. Пробовал даже через malloc память выделять, всё едино. Что там такого может происходить вообще?

★★★★★

Ещё переставь первую и вторую строчки местами и вычисляй размер 1 раз: так эффективнее и безопаснее. И для i и l вместо long используй size_t, на худой конец unsigned long.

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

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

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

Это, по сути, обвязки над сишным Портаудио, там векторы по коллбэкам не прокинешь. Приходится вручную.

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

Портаудио, там векторы по коллбэкам не прокинешь. Приходится вручную.

Вы заблуждаетесь. &*vector::begin() ничем не отличается от сишного массива.

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

Хм, интересно. Надо поэкспериментировать.

meliafaro ★★★★★
() автор топика

Пробовал даже через malloc память выделять, всё едино.

C этого места поподробнее.

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

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

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

Valgrind можно дополнить AS TS и прочими инструментами, но одновременно не работает, прогонять с одним вторым третьим. Анализаторы потребления памяти и профилировщики производительности. Всё это даже такие балбесы как я юзают

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