-
UID:176261
-
- 注册时间2016-10-18
- 最后登录2024-04-29
- 在线时间26小时
-
- 发帖35
- 搜Ta的帖子
- 精华0
- 金钱371
- 威望46
- 贡献值0
- 好评度36
-
访问TA的空间加好友用道具
|
我有2个cpp文件,2个里面各自有一个结构体,成员不一样,但是名字恰好一样。 我使用的时候,就会出问题,2个结构体混淆了,可能会导致程序崩溃。 用g++编译的时候,g++并没有报错。 有没有方法,能主动发现类似的错误? 下面的源码,运行时会直接崩溃。而且,看打印,test_fun.cpp里面的变量,析构时,会调用main.cpp里面的析构函数。 main.cpp
- #include <stdio.h>
- #include <string>
- #include <vector>
- #include <unistd.h>
- #define ht_log_info(xx,args...) fprintf(stderr, xx"\n", ##args)
- int test_key_fun1();
- int test_key_fun2();
- int test_key_fun3();
- int a;
- typedef struct key_info_s{
- std::string key;
- std::string value;
- ~key_info_s(){
- ht_log_info("main::key_info_s: delete ,size=%d", sizeof( struct key_info_s));
- }
- }KEY_INFO_T;
- class KEY_ITEM_T{
- std::string key;
- std::string value;
- int a;
- int b;
- int c;
- };
- int main()
- {
- // test_key_fun2();
- test_key_fun3();
- test_key_fun1();
- KEY_INFO_T aaaa;
- while(1)
- {
- usleep(1e6);
- int a = 34;
- int b= 34;
- int c = a + b;
- ht_log_info("c=%d", c);
- }
- return 0;
- }
test_fun.cpp - static int m_test_key1=13;
- #include <stdio.h>
- #include <string>
- #include <vector>
- #define ht_log_info(xx,args...) fprintf(stderr, xx"\n", ##args)
- typedef struct key_info_s{
- int x;
- int y;
- std::string key;
- std::string value;
- int a;
- int b;
- int c;
- ~key_info_s(){
- ht_log_info("test_fun.cpp::key_info_s: delete ,size=%d", sizeof( struct key_info_s));
- }
- }KEY_INFO_T;
- class KEY_ITEM_T{
- public:
- int x;
- int y;
- std::string key;
- std::string value;
- int a;
- int b;
- int c;
- };
- static std::vector<KEY_INFO_T> m_key_info_list;
- extern int a;
- int test_key_fun1()
- {
- KEY_INFO_T key_info;
- key_info.x = 11;
- key_info.y = 12;
- key_info.key = "abcd";
- key_info.value = "123";
- key_info.a = 21;
- key_info.b = 22;
- key_info.c = 23;
- m_key_info_list.push_back(key_info);
- KEY_INFO_T &key_info2 = m_key_info_list[0];
- ht_log_info("size=%d, [%d][%d][%s][%s]", sizeof(KEY_INFO_T), key_info2.x, key_info2.y, key_info2.key.data(), key_info2.value.data());
- ht_log_info("size=%d, [%d][%d][%d]", sizeof(KEY_INFO_T), key_info2.a, key_info2.b, key_info2.c);
- return 0;
- }
- int test_key_fun2()
- {
- ht_log_info("test_key_fun2:m_test_key1=%d", m_test_key1);
- ht_log_info("a=%d", a);
- ht_log_info("a=%lf", a);
- return 1;
- }
- static std::vector<KEY_ITEM_T> m_key_item_list;
- int test_key_fun3()
- {
- KEY_ITEM_T key_info;
- key_info.x = 11;
- key_info.y = 12;
- key_info.key = "abcd";
- key_info.value = "123";
- m_key_item_list.push_back(key_info);
- KEY_ITEM_T &key_info2 = m_key_item_list[0];
- ht_log_info("size=%d, [%d][%d][%s][%s]",sizeof(KEY_ITEM_T), key_info2.x, key_info2.y, key_info2.key.data(), key_info2.value.data());
- return 0;
- }
|