堆栈周围的变量被破坏-添加简单类到std::vector
Stack arround variable is corrupted - adding simple class to std::vector
我有一个向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));
相关文章:
- std::list 可以用于简单的无锁队列吗?
- 简单使用 std::atomic 在两个线程之间共享数据
- GDB 8.1 无法在单线程简单程序中跟踪 std::string 变量的值
- 不使用与左右停止工作命名空间 std 的简单比较
- 创建可以遍历 std::map 值的通用模板迭代器的最简单方法是什么?
- 在C++中将算术类型转换为 std::array 的最简单方法<uint8_t>
- 将while+if else转为更简单的std::remove_if
- "std::function"的简单版本:函数对象的生存期?
- 具有 std:out_of_range 问题的简单密码 (C++)
- 为什么 std::atomic 在视觉C++中不是简单的类型?
- 为什么传统的 GetProcAddress 到 std::function 并不简单
- 在一个简单的程序中断言失败 std::ispunct 中
- 无法运行简单的 std::async 和 std::future 测试程序。错误:"has initializer but incomplete type."发生了什么?
- STD :: Atomic在一个简单的POD类中
- 简单的方法将隐式类型促销添加到std ::复杂类操作员
- 为什么 std::cin.clear() 在这个简单的程序中不起作用?
- 为什么我们不能简单地复制 std::function
- 获取 std::array 底层数组内存大小的最简单方法?
- 在 Linux 上使用 GCC 4.6 和 4.7 运行简单 std::thread 代码时的核心转储
- 简单std::排序不起作用