一个函数中的局部变量被压入一个全局变量链表中,函数结束时此局部变量会被释放么?

时间:2022-04-16 10:29:18
#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指针指向这个地方

#2


STL的玩样会自动复制一份的。(除了你压指针,那就没药救了)

#3


不好意思说错了,是g_list中a和b的效果不同,a地址有效内容无效,b地址就是无效的。不是g_list2.

#4


g_list中a的地址每次可能不同,但内容总是“-”,好奇怪

#5


引用 2 楼  的回复:
STL的玩样会自动复制一份的。(除了你压指针,那就没药救了)


好吧,就等这句话了,有出处么

#6


看一下C++primer就知道了  基础啊。。。。

#1


g_list2中的数据应该是对的

x1.b = "bbbb"; // 字符串存放在常量区,b指针指向这个地方

#2


STL的玩样会自动复制一份的。(除了你压指针,那就没药救了)

#3


不好意思说错了,是g_list中a和b的效果不同,a地址有效内容无效,b地址就是无效的。不是g_list2.

#4


g_list中a的地址每次可能不同,但内容总是“-”,好奇怪

#5


引用 2 楼  的回复:
STL的玩样会自动复制一份的。(除了你压指针,那就没药救了)


好吧,就等这句话了,有出处么

#6


看一下C++primer就知道了  基础啊。。。。