У меня есть класс, который манипулирует блоком памяти.
class cPacket {
public:
cPacket(
: vBuffer( 96000 )
{
#ifdef USE_VECTOR
myPacketBuffer = vBuffer.data();
#else
myPacketBuffer = aPacketBuffer;
}
...
protected:
unsigned char * myPacketBuffer;
std::vector< unsigned char > vBuffer;
unsigned char aPacketBuffer[ 96000 ];
};
В коде только указатель myPacketBuffer используется для доступа к блоку памяти 96000 байт
Используя массив, все работает отлично.
Используя вектор, все модульные тесты работают, но производственное приложение работает некоторое время, а затем таинственно падает в системном коде, очевидно, что-то связанное с выделением памяти.
Program received signal SIGTRAP, Trace/breakpoint trap.
Использование вектора будет намного удобнее — я могу выделить меньшие блоки памяти, если максимум не нужен.
В чем разница между использованием массива и вектора, которые могут вызывать сбои при использовании вектора.
Задача ещё не решена.
Других решений пока нет …