#include <list>
using namespace std;
#include <windows.h>
struct xx
{
int x;
char a[100];
char *b;
};
list<xx*> g_list;
list<xx> g_list2;
void test()
{
for(int i=0;i<10;++i)
{
xx x1;
x1.x = 1;
strcpy(x1.a,"aaaa");
x1.b = "bbbb";
g_list.push_back(&x1);
g_list2.push_back(x1);
}
}
void main()
{
test();
printf("size:%d\n",g_list.size());
printf("size2:%d\n",g_list2.size());
int i=0;
for(list<xx*>::iterator it = g_list.begin();it != g_list.end();++it)
printf("%d :\nx: %d\n a地址:%d\n a内容:%s \nb:%d\n\n",++i,(*it)->x,(*it)->a,(*it)->a,(*it)->b);
i=0;
for(list<xx>::iterator it = g_list2.begin();it != g_list2.end();++it)
printf("%d :\nx: %d\n a:%s\n b:%s\n\n",++i,it->x,it->a,it->b);
Sleep(100000000);
}
以上g_list和g_list2的输出完全不同,g_list2中a和b的效果也不同,a地址有效内容无效,b地址就是无效的。
求高手解释,g_list中的局部变量为什么没有释放掉呢,难道压入的过程会先复制一份再压入么,g_list2中a和b的效果为什么不同呢?
6 个解决方案
#1
g_list2中的数据应该是对的
x1.b = "bbbb"; // 字符串存放在常量区,b指针指向这个地方
x1.b = "bbbb"; // 字符串存放在常量区,b指针指向这个地方
#2
STL的玩样会自动复制一份的。(除了你压指针,那就没药救了)
#3
不好意思说错了,是g_list中a和b的效果不同,a地址有效内容无效,b地址就是无效的。不是g_list2.
#4
g_list中a的地址每次可能不同,但内容总是“-”,好奇怪
#5
好吧,就等这句话了,有出处么
#6
看一下C++primer就知道了 基础啊。。。。
#1
g_list2中的数据应该是对的
x1.b = "bbbb"; // 字符串存放在常量区,b指针指向这个地方
x1.b = "bbbb"; // 字符串存放在常量区,b指针指向这个地方
#2
STL的玩样会自动复制一份的。(除了你压指针,那就没药救了)
#3
不好意思说错了,是g_list中a和b的效果不同,a地址有效内容无效,b地址就是无效的。不是g_list2.
#4
g_list中a的地址每次可能不同,但内容总是“-”,好奇怪
#5
好吧,就等这句话了,有出处么
#6
看一下C++primer就知道了 基础啊。。。。