#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <regex>
struct AAA{
unsigned char* type = nullptr;
unsigned char* str = nullptr;
int xxx;
int yyy;
};
struct BBB{
unsigned char* type = nullptr;
unsigned char* str = nullptr;
int zzz;
};
int main(int argc, char *argv[])
{
// 前準備
char aaa_str_temp[9] = {0x41,0x42,0x43,0x31,0x32,0x33,0x44,0x45,0x46};
AAA aaa;
AAA* p_aaa = &aaa;
p_aaa->type = (unsigned char*)malloc(1);
p_aaa->type[0] = 0x01;
p_aaa->str = (unsigned char*)malloc(10);
memcpy(p_aaa->str, aaa_str_temp, 9);
p_aaa->str[9] = 0x00;
char bbb_str_temp[9] = {0x55,0x56,0x57,0x34,0x35,0x36,0x58,0x59,0x5a};
BBB bbb;
BBB* p_bbb = &bbb;
p_bbb->type = (unsigned char*)malloc(1);
p_bbb->type[0] = 0x02;
p_bbb->str = (unsigned char*)malloc(10);
memcpy(p_bbb->str, bbb_str_temp, 9);
p_bbb->str[9] = 0x00;
// まずは内容確認
printf("変更前AAA %02x %s\n", p_aaa->type[0], p_aaa->str);
printf("変更後BBB %02x %s\n", p_bbb->type[0], p_bbb->str);
//--------------------------------------------------------------------------------
// ここから同じ処理をp_aaa, p_bbb, 両方書かないといけない。。
//--------------------------------------------------------------------------------
unsigned char* aaa_str_new = (unsigned char*)realloc(p_aaa->str, 12);
if( aaa_str_new == NULL ){
printf("error\n"); exit(1);
}
// アドレス変わったら置き換え
if( p_aaa->str != aaa_str_new ){
p_aaa->str = aaa_str_new;
}
p_aaa->str[9] = 0x41;
p_aaa->str[10] = 0x41;
p_aaa->str[11] = 0x00;
unsigned char* bbb_str_new = (unsigned char*)realloc(p_bbb->str, 12);
if( bbb_str_new == NULL ){
printf("error\n"); exit(1);
}
// アドレス変わったら置き換え
if( p_bbb->str != bbb_str_new ){
p_bbb->str = bbb_str_new;
}
p_bbb->str[9] = 0x41;
p_bbb->str[10] = 0x41;
p_bbb->str[11] = 0x00;
//--------------------------------------------------------------------------------
// ここまで
//--------------------------------------------------------------------------------
printf("\n");
printf("変更後AAA %02x %s\n", p_aaa->type[0], p_aaa->str);
printf("変更後BBB %02x %s\n", p_bbb->type[0], p_bbb->str);
return(1);
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8cmVnZXg+CgpzdHJ1Y3QgQUFBewogICAgdW5zaWduZWQgY2hhciogdHlwZSA9IG51bGxwdHI7CiAgICB1bnNpZ25lZCBjaGFyKiBzdHIgPSBudWxscHRyOwogICAgaW50IHh4eDsKICAgIGludCB5eXk7Cn07CnN0cnVjdCBCQkJ7CiAgICB1bnNpZ25lZCBjaGFyKiB0eXBlID0gbnVsbHB0cjsKICAgIHVuc2lnbmVkIGNoYXIqIHN0ciA9IG51bGxwdHI7CiAgICBpbnQgenp6Owp9OwoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewogICAgLy8g5YmN5rqW5YKZCiAgICBjaGFyIGFhYV9zdHJfdGVtcFs5XSA9IHsweDQxLDB4NDIsMHg0MywweDMxLDB4MzIsMHgzMywweDQ0LDB4NDUsMHg0Nn07CiAgICBBQUEgYWFhOwogICAgQUFBKiBwX2FhYSA9ICZhYWE7CiAgICBwX2FhYS0+dHlwZSA9ICh1bnNpZ25lZCBjaGFyKiltYWxsb2MoMSk7CiAgICBwX2FhYS0+dHlwZVswXSA9IDB4MDE7CiAgICBwX2FhYS0+c3RyID0gKHVuc2lnbmVkIGNoYXIqKW1hbGxvYygxMCk7CiAgICBtZW1jcHkocF9hYWEtPnN0ciwgYWFhX3N0cl90ZW1wLCA5KTsKICAgIHBfYWFhLT5zdHJbOV0gPSAweDAwOwoKICAgIGNoYXIgYmJiX3N0cl90ZW1wWzldID0gezB4NTUsMHg1NiwweDU3LDB4MzQsMHgzNSwweDM2LDB4NTgsMHg1OSwweDVhfTsKICAgIEJCQiBiYmI7CiAgICBCQkIqIHBfYmJiID0gJmJiYjsKICAgIHBfYmJiLT50eXBlID0gKHVuc2lnbmVkIGNoYXIqKW1hbGxvYygxKTsKICAgIHBfYmJiLT50eXBlWzBdID0gMHgwMjsKICAgIHBfYmJiLT5zdHIgPSAodW5zaWduZWQgY2hhciopbWFsbG9jKDEwKTsKICAgIG1lbWNweShwX2JiYi0+c3RyLCBiYmJfc3RyX3RlbXAsIDkpOwogICAgcF9iYmItPnN0cls5XSA9IDB4MDA7CgogICAgLy8g44G+44Ga44Gv5YaF5a6556K66KqNCiAgICBwcmludGYoIuWkieabtOWJjUFBQSAlMDJ4ICAlc1xuIiwgcF9hYWEtPnR5cGVbMF0sIHBfYWFhLT5zdHIpOwogICAgcHJpbnRmKCLlpInmm7TlvoxCQkIgJTAyeCAgJXNcbiIsIHBfYmJiLT50eXBlWzBdLCBwX2JiYi0+c3RyKTsKCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvLyDjgZPjgZPjgYvjgonlkIzjgZjlh6bnkIbjgpJwX2FhYSwgcF9iYmIsIOS4oeaWueabuOOBi+OBquOBhOOBqOOBhOOBkeOBquOBhOOAguOAggogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgdW5zaWduZWQgY2hhciogYWFhX3N0cl9uZXcgPSAodW5zaWduZWQgY2hhciopcmVhbGxvYyhwX2FhYS0+c3RyLCAxMik7CiAgICBpZiggYWFhX3N0cl9uZXcgPT0gTlVMTCApewogICAgICAgIHByaW50ZigiZXJyb3JcbiIpOyBleGl0KDEpOwogICAgfQogICAgLy8g44Ki44OJ44Os44K55aSJ44KP44Gj44Gf44KJ572u44GN5o+b44GICiAgICBpZiggcF9hYWEtPnN0ciAhPSBhYWFfc3RyX25ldyApewogICAgICAgIHBfYWFhLT5zdHIgPSBhYWFfc3RyX25ldzsKICAgIH0KICAgIHBfYWFhLT5zdHJbOV0gPSAweDQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgcF9hYWEtPnN0clsxMF0gPSAweDQxOwogICAgcF9hYWEtPnN0clsxMV0gPSAweDAwOwoKICAgIHVuc2lnbmVkIGNoYXIqIGJiYl9zdHJfbmV3ID0gKHVuc2lnbmVkIGNoYXIqKXJlYWxsb2MocF9iYmItPnN0ciwgMTIpOwogICAgaWYoIGJiYl9zdHJfbmV3ID09IE5VTEwgKXsKICAgICAgICBwcmludGYoImVycm9yXG4iKTsgZXhpdCgxKTsKICAgIH0KICAgIC8vIOOCouODieODrOOCueWkieOCj+OBo+OBn+OCiee9ruOBjeaPm+OBiAogICAgaWYoIHBfYmJiLT5zdHIgIT0gYmJiX3N0cl9uZXcgKXsKICAgICAgICBwX2JiYi0+c3RyID0gYmJiX3N0cl9uZXc7CiAgICB9CiAgICBwX2JiYi0+c3RyWzldID0gMHg0MTsKICAgIHBfYmJiLT5zdHJbMTBdID0gMHg0MTsKICAgIHBfYmJiLT5zdHJbMTFdID0gMHgwMDsKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIOOBk+OBk+OBvuOBpwogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIHByaW50ZigiXG4iKTsKICAgIHByaW50Zigi5aSJ5pu05b6MQUFBICUwMnggICVzXG4iLCBwX2FhYS0+dHlwZVswXSwgcF9hYWEtPnN0cik7CiAgICBwcmludGYoIuWkieabtOW+jEJCQiAlMDJ4ICAlc1xuIiwgcF9iYmItPnR5cGVbMF0sIHBfYmJiLT5zdHIpOwoKICAgIHJldHVybigxKTsKfQoK