【问题标题】:Quantlib FixedRateBond Cashflow Memory LeakQuantlib FixedRateBond 现金流内存泄漏
【发布时间】:2016-03-07 06:29:43
【问题描述】:

当我提取并迭代固定利率债券的现金流时,Valgrind 报告内存泄漏。我正在使用以下代码:

FixedRateBond fixedRateBond(
        settlementDays,
        faceAmount,
        fixedBondSchedule,
        std::vector<Rate>(1, couponRate),
        ActualActual(ActualActual::Bond),
        BusinessDayConvention ::Unadjusted,
        redemption,
        issueDate
);

vector<boost::shared_ptr<CashFlow>> cashFlows = fixedRateBond.cashflows();

for (size_t i=0; i != cashFlows.size(); ++i) {
    cout << "Date: " << cashFlows[i]->date() << " Amount: " << cashFlows[i]->amount() <<endl;
}

编辑:看起来这是一个 OSX 问题,因为相同的代码在 Linux 中运行时不会引发任何问题。为了后代,这是我在 OSX 上得到的报告:

==62096== 148 (80 direct, 68 indirect) bytes in 1 blocks are definitely lost in loss record 170 of 208
==62096==    at 0x1001F8EA1: malloc (vg_replace_malloc.c:303)
==62096==    by 0x102D3D4A2: __Balloc_D2A (in /usr/lib/system/libsystem_c.dylib)
==62096==    by 0x102D3DDEB: __d2b_D2A (in /usr/lib/system/libsystem_c.dylib)
==62096==    by 0x102D3A443: __dtoa (in /usr/lib/system/libsystem_c.dylib)
==62096==    by 0x102D6307A: __vfprintf (in /usr/lib/system/libsystem_c.dylib)
==62096==    by 0x102D8C35C: __v2printf (in /usr/lib/system/libsystem_c.dylib)
==62096==    by 0x102D705A8: _vsnprintf (in /usr/lib/system/libsystem_c.dylib)
==62096==    by 0x102D70607: vsnprintf_l (in /usr/lib/system/libsystem_c.dylib)
==62096==    by 0x102D60AB1: snprintf_l (in /usr/lib/system/libsystem_c.dylib)
==62096==    by 0x102ACD752: std::__1::num_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > >::do_put(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, char, double) const (in /usr/lib/libc++.1.dylib)
==62096==    by 0x102AB3B33: std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(double) (in /usr/lib/libc++.1.dylib)
==62096==    by 0x10000A2D1: main (main.cpp:31)

【问题讨论】:

  • 我不明白vectorshared_ptr 如何正确管理存储的内存。你有更多关于 valgrind 报告的细节吗?
  • 我愿意,但它似乎是 OSX 的问题,因为我只是在 Linux 上运行了类似的代码,而没有来自 Valgrind 的任何消息。如果您仍然想要我可以提供的报告?
  • 很奇怪。似乎它甚至不是 QuantLib 代码:它在 operator&lt;&lt;(double) 中,在对 amount 的调用完成之后并且正在打印结果时。我同意,我会将其归因于某种 OS X 问题。

标签: memory-leaks quantlib


【解决方案1】:

这似乎与 OS X 有关,因为该问题不会在 Linux 上发生,并且(总是有帮助的)Luigi 指出不在 QuantLib 代码本身中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    • 2014-06-04
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多