Два дня бьюсь, на ровном месте крашится программа.
WinCE SDK 5.0, MSVC 2005.
Если создать новый порект и куда-нибудь в начало копирнуть кусок кода:
#include <QMap>
.......
{
QMap<QString, QString> map_hdr;
map_hdr["target"] = "test";
unsigned char *buf_out = new unsigned char[188];
memset(buf_out, 0, 188);
int counter_dd = 0;
for(QMap<QString, QString> ::const_iterator begin = map_hdr.constBegin(), end= map_hdr.constEnd(); begin != end; ++begin)
{
counter_dd += 1;
int a = 0x11223344;
// *((unsigned int*)(buf_out + counter_dd)) = a;
((unsigned int*)(buf_out + counter_dd))[0] = a;
{ //// PRINT BUFFER IN HEX
QByteArray arr((const char*)buf_out, 188);
QString str_hex(arr.toHex());
QMessageBox::warning(this, "", str_hex);
}
}
delete [] buf_out;
}
то на девайсе будет краш с ошибкой 0x80000002.
MSDN говорит, что мол "Ran out of memory".
Сначала код был с использованием std::map.
Было также. Грешил на реализацию stl. Запустил с QMap.
Причем если вместо
Поставить:
Или другое число, ничего не падает.
Ума не приложу, в чем дело.
Если с stl я мог предположить, что std::map портит стек, то тут вообще идеи закончились.
(На других платформах - линукс, виндовс, фря - все порверено и работает).
Выручайте!
ДОБАВЛЕНОУбрал QMap
{
unsigned char *buf_out = new unsigned char[188];
memset(buf_out, 0, 188);
int counter_dd = 0;
for(int i = 0; i < 2; i++)
{
counter_dd += 1;
int a = 0x11223344;
// *((unsigned int*)(buf_out + counter_dd)) = a;
((unsigned int*)(buf_out + counter_dd))[0] = a;
{ //// PRINT BUFFER IN HEX
QByteArray arr((const char*)buf_out, 188);
QString str_hex(arr.toHex());
QMessageBox::warning(this, "", str_hex);
}
}
delete [] buf_out;
}
Просто код на Си. Падает.