• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

std::list

World7th 2008-12-01 10:14:33
麻烦大家测试一下面的代码,不知道为什么崩溃,换成vector就不崩溃

//-------------g_variabletest.cpp-----------------------------

#include <list>
#include <string>
#include "test.h"

test g_test;

int main()
{
getchar();
return 0;
}

//------------test.h-------------------------------------
#include <list>
#include <vector>
#include <string>

class test
{
public:
test();
~test();

private:
static std::list<std::string> m_sList;
//static std::vector<std::string> m_sVec;


};

//-----------------test.cpp------------------------
#include <iostream>
#include "test.h"

std::list<std::string> test::m_sList;
//std::vector<std::string> test::m_sVec;

test::test()
{
std::list<std::string>::iterator it = m_sList.begin();
//std::vector<std::string>::iterator it = m_sVec.begin();

//for (; it != m_sVec.end(); it++)
for (; it != m_sList.end(); it++)
{
std::cout << "test" << std::endl;
}
}

test::~test()
{
}
...全文
1346 点赞 收藏 18
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
World7th 2008-12-08
程序就是测试用的,就是想了解其中的实质.
回复
ilovedrv 2008-12-05
另外设计程序,往往不要纠缠这种替换测试,用vector就没有错误了?

你怎么知道,运行没错误,并不能证明你的程序没有问题


出现这种问题,还是要遵循那个“程序是调出来的,不是写出来的”
回复
ilovedrv 2008-12-05
这程序写的,太混乱了

你在

test g_test;


std::list <std::string> test::m_sList;

这两行代码上分别下个断点,看看程序是怎么执行的


构造函数调用顺序不是你想要的

另外即使使用全局变量,也不应该在构造函数之内进行复杂的逻辑处理,一般都是值初始话类自身的状态

然后在主程序中通过调用类的接口完成时序
回复
roadblossom 2008-12-05
学习
回复
World7th 2008-12-05
看来没人能解答了啊,哎
回复
World7th 2008-12-04
回复
World7th 2008-12-03
换成vector跟进去不会出现问题.等待解答
回复
lzg0001 2008-12-03
[Quote=引用 9 楼 gellf 的回复:]
试了下,执行顺序的问题。
先初始化main()所在文件全局或静态变量,在其他文件全局或静态变量。

test g_test; 在main()外,std::list <std::string> test::m_sList;尚未初始化,
iterator begin()
{return (iterator(_Acc::_Next(_Head))); }

_Head = 0x0;

_Acc::_Next(_Head)这句错误。

PS:VC+6
[/Quote]

[Quote=引用 10 楼 World7th 的回复:]
那为什么换成vector就对了?楼上的帮忙解开实质.
[/Quote]

"对了"往往是假相!
编译成 DEBUG 版本用 VC 跟进行看它在哪错的不就知道问题了?!
回复
World7th 2008-12-03
那为什么换成vector就对了?楼上的帮忙解开实质.
回复
World7th 2008-12-02
怎么没有人回答啊,有人vc6.0编译能行吗?我这里没有vc6.0
回复
gellf 2008-12-02
试了下,执行顺序的问题。
先初始化main()所在文件全局或静态变量,在其他文件全局或静态变量。

test g_test; 在main()外,std::list <std::string> test::m_sList;尚未初始化,
iterator begin()
{return (iterator(_Acc::_Next(_Head))); }

_Head = 0x0;

_Acc::_Next(_Head)这句错误。

PS:VC+6
回复
World7th 2008-12-02
楼上的好建议,但是请先测试一下我的代码,看有没有问题,问题是test g_test; 这个放在main之外就会出错,放在main之内不会出错.不知道是不是我的编译器有问题.
回复
lzg0001 2008-12-02

给你一个建议,仅供参考:

不要直接在 list 中放置类的对象,特别是对象内部含有指针类型成员的情况, 如果你确实需要这样作的话,一定要特别小心处理类的拷贝构造函数和类的析构函数! list 在 push 的时候实际上是调用类的拷贝构造函数来构造一个新的对象来在内部使用的!

我个人一般都是放置对象的指针,自己 new 出对象传给 list,释放时自己 delete,再 list::clear.

回复
编程的夜猫 2008-12-01
没看出有什么不对
回复
healer_kx 2008-12-01
应该是可以互相替换的关系。
回复
hurryboylqs 2008-12-01
咋崩溃了?错误呢? 我这里是没问题的
回复
World7th 2008-12-01
用vs2005进行编译,看看是不是vs2005的bug.
回复
World7th 2008-12-01
看是看不出问题的,编译运行一下看看
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2008-12-01 10:14
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……