C ++ Struct初始化问题

时间:2010-09-30 14:40:00

标签: c++

这个c ++代码工作正常,但是内存验证器说我在使用删除指针: grf-> filePath = fname;你知道为什么吗?谢谢。

Dirloader.h

  // Other code  
  class CDirLoader  
    {
    public:    
     struct TKnownGRF
     {
      std::string filePath;
      DWORD encodingType;
      DWORD userDataLen;
      char *userData;
     };
       // Other Code

     CDirLoader();
     virtual ~CDirLoader();

Dirloader.cpp

// Other code
void CDirLoader::AddGroupFile(const std::string& _fname)
{
// Other code including std::string fname = _fname;
TKnownGRF *grf = new TKnownGRF;
grf->filePath = fname;
delete grf; // Just for testing purposes

P.S。:这只是一个代码提取。当然,如果我在.cpp中定义一个结构TKnownGRF并将其用作实际对象,gfr.filepath = something,而不是指针grf-> filepath =某些东西,而不是它可以,但我需要在里面* .h在CDirLoader类中,由于许多其他矢量分配。

2 个答案:

答案 0 :(得分:0)

由于该函数返回void

void CDirLoader::AddGroupFile(const std::string& _fname)

问题是你要对grf做什么?

你要去delete吗?如果是,那么,为什么要new?你可以在堆栈上声明一个TKnownGRF变量!在这种情况下,_fname对此方法的逻辑没有贡献。

我想类CDirLoader有一个TKnownGRF类型的成员变量,比如grf_,需要在AddsGroupFile()方法中使用,例如:< / p>

grf_.filepath = _fname;

答案 1 :(得分:0)

这是否恰好使用旧版本的STL,比如VC6,并运行多线程?旧版本的STL的字符串类在写入实现时使用了引用计数副本,这在多线程环境中并不真正起作用。 See this KB article on VC 6

或者,您也可能正在查看错误的问题。如果您调用std::string::c_str()并缓存结果,则在修改原始string时,缓存的结果可能会失效。在某些情况下,您可以侥幸逃脱,但这是非常具体的实现。

相关问题