初期化

こんなコードがあったとして、


#include
#include

using namespace std;

struct Test {
int x;
int y;
int z;
};

void init(Test *t);

int main() {
Test t;
init(&t);
cout << t.x << " " << t.y << " " << t.z << endl;
}

void init(Test *t) {
...
}

この構造体を改変して(継承とかありえない)、mapを加えたら、


#include
#include
#include

using namespace std;

struct Test {
int x;
int y;
int z;
map m;
};

void init(Test *t);

int main() {
Test t;
init(&t);
t.m[0] = 0;
cout << t.x << " " << t.y << " " << t.z << endl;
}

void init(Test *t) {
...
}

落ちるようになった。
おかしいおかしいと思って調べてみたら、実は、


void init(Test *t) {
memset(t, 0, sizeof(Test));
}

と、memsetで初期化していたのだった。
やはり、ふつうmemsetは使わないほうがいい。