У меня есть следующий код:
#include <iostream>
#include <string>
#include <cstring>
struct test {
std::string name;
size_t id;
};
int main() {
test t;
t.name = "147.8.179.239";
t.id = 10;
char a[sizeof(t)] = "";
std::memcpy(a, &t, sizeof(t));
test b;
std::memcpy(&b, a, sizeof(t));
std::cout << b.name << " " << b.id << std::endl;
}
когда я его компилирую и запускаю, он выдает следующую ошибку:
147.8.179.239 10
*** Error in `./test': double free or corruption (fasttop): 0x0000000000bf9c20 ***
Aborted (core dumped)
Оказывается, код может распечатать результат. Но как я могу исправить эту ошибку?
sizeof(t)
известно во время компиляции. Если бы OP делалchar a[t.name.length()]
, это был бы VLA, но я не понимаю, как это VLA. - person Borgleader   schedule 18.08.2016sizeof(t)
здесь фиксированная длина - person Johnnylin   schedule 18.08.2016memcpy
для типов, отличных отstd::is_trivial<T>::value
. - person KABoissonneault   schedule 18.08.2016