Я пытаюсь добавить одну строку в другую. Я объявляю две глобальные строковые переменные -
string grid_filename = "grids/";
string rest;
Тогда у меня есть функция для получения аргументов командной строки. Всякий раз, когда пользователь вводит имя файла в аргумент командной строки, оно должно быть сохранено в rest, а затем rest добавляется к grid_filename.
else if(strcmp(temp.substr(0,16).c_str(), "--grid-filename=") == 0) {
rest = temp.substr(16,strlen(temp.c_str())-16);
grid_filename.append(rest); //line 74!
}
Теперь, когда я запускаю свой код, valgrind выдаёт мне эту ошибку -
==5602== Address 0x45fdc30 is 0 bytes after a block of size 32 alloc'd
==5602== at 0x402641D: operator new(unsigned int) (vg_replace_malloc.c:255)
==5602== by 0x43039F7: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14)
==5602== by 0x4304C77: std::string::_Rep::_M_clone(std::allocator<char> const&, unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14)
==5602== by 0x4304DA6: std::string::reserve(unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14)
==5602== by 0x43053E9: std::string::append(std::string const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14)
==5602== by 0x804D5AE: get_command_line_args(int, char**) (main.cpp:74)
==5602== by 0x804F138: main (main.cpp:244)
Я распечатываю два адреса строк, и ни один из них не совпадает с тем, что, по словам Вальгринда, составляет 0 байтов. Что мне здесь не хватает?
Я считаю, что это приводит к моей второй ошибке, потому что я передаю grid_filename другой функции, которая отправляет строку по TCP-соединению. Вальгринд говорит мне
==5660== Syscall param socketcall.send(msg) points to unaddressable byte(s)
==5660== at 0x404A9B1: send (socket.S:64)
==5660== by 0x804F7C8: main (main.cpp:364)
Может кто-нибудь объяснить мне, в чем проблема? Любая помощь будет оценена. Я могу предоставить больше о коде, если это необходимо.