Stack arround变量已损坏 - 将简单类添加到std :: vector

时间:2015-08-12 17:27:06

标签: c++ stdvector

我有一个向向量添加类的基本示例:

std::vector<AudioFile> audioList;
DllExport void add_audio(const char* srcFile, double startSecInSrc, double fromSecInMovie, double toSecInMovie, long id)
{
    AudioFile a(id, srcFile, startSecInSrc, fromSecInMovie, toSecInMovie);
    audioList.push_back(a);
}

在函数结束时,我得到堆栈在变量a

周围被破坏

我做错了什么?

    class AudioFile 
    {
         long _id;
         std::string _fileLocation;
         double _startSecInSrc, _fromSecInMovie, _toSecInMovie;
         double _duration;
         public:
         AudioFile(long _id, std::string _fileLocation, double _startSecInSrc,double _fromSecInMovie, double _toSecInMovie);
         ~AudioFile();
         static bool ComparePredicat(AudioFile first, AudioFile second);
    };

     bool AudioFile::ComparePredicat(AudioFile first, AudioFile second)
     {
          if (first._startSecInSrc <= second._startSecInSrc)
          return true;
          return false;
      }

       AudioFile::AudioFile(long id, std::string fileLocation, double startSecInSrc, double fromSecInMovie, double toSecInMovie)
      {
        _id = id;
        _fileLocation = fileLocation;
    _startSecInSrc = startSecInSrc;
    _fromSecInMovie = fromSecInMovie;
    _toSecInMovie = toSecInMovie;

             _duration = toSecInMovie - fromSecInMovie;
   }   AudioFile::~AudioFile()
   {
   }

感谢。

1 个答案:

答案 0 :(得分:-3)

可能会有更多的事情发生,但是为了创建一个新对象并保存它,你应该声明一个变量然后初始化它。使用 new 关键字。即AudioFile a = new AudioFile(...);在你的add_audio()函数中。

此外,您可以使您的功能稍微缩短(但风格可以决定您想要如何编写它):

audioList.push_back(new AudioFile(id, srcFile, startSecInSrc, fromSecInMovie, toSecInMovie));