堆栈周围的变量被破坏-添加简单类到std::vector

Stack arround variable is corrupted - adding simple class to std::vector

本文关键字:简单 std vector 添加 周围 变量 堆栈      更新时间:2023-10-16

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

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()
   {
   }

谢谢。

可能还有更多,但是要创建一个新对象并保存它,您应该声明一个变量,然后初始化它。使用new关键字即AudioFile a = new AudioFile(…);在add_audio()函数中。

你也可以让你的函数稍微短一点(但风格可以决定你想怎么写它):

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