У меня следующее определение сообщения
syntax = "proto3";
message TestMessage {
fixed32 id = 1;
bytes data = 2;
}
Когда я запускаю следующую программу в режиме отладки, я получаю нарушение прав доступа.
#include <cstdint>
#include "test.pb.h"
int main(int argc, char *argv[])
{
TestMessage msg;
msg.set_id(4711);
std::string* dataString = msg.mutable_data();
dataString->resize(100000); // access violation here
std::cout << (*dataString) << std::endl;
std::string str;
std::getline(std::cin, str);
}
Даже следующее выдает нарушение прав доступав режиме отладки.
#include <cstdint>
#include "test.pb.h"
int main(int argc, char *argv[])
{
TestMessage msg;
msg.set_id(4711);
std::string* dataString = msg.mutable_data();
dataString->append("Hello, World!");
dataString->append("Hello, World!");
dataString->append("Hello, World!"); // access violation here
dataString->append("Hello, World!");
std::cout << (*dataString) << std::endl;
std::string str;
std::getline(std::cin, str);
}
В режиме RELEASE программы работают должным образом.
Это раздражает, так как я не могу проверить свое настоящее приложение в режиме отладки.
Есть идеи, в чем проблема?
(Среда: Windows 10, Protocol Buffers v3.6.1, VS 2017, через cmake)
(#define PROTOBUF_USE_DLLS
добавлено в test.pb.h)
РЕДАКТИРОВАТЬ:
Я попытался снова со статическими связанными библиотеками вместо связанных с dymanic, и чем это работает также в режиме отладки.