<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Valgrind on Hacper&#39;s Blog</title>
    <link>https://hacperme.com/tags/valgrind/</link>
    <description>Recent content in Valgrind on Hacper&#39;s Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh</language>
    <lastBuildDate>Sat, 19 Aug 2023 00:38:26 +0800</lastBuildDate>
    <atom:link href="https://hacperme.com/tags/valgrind/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>使用 valgrind 检测内存问题示例</title>
      <link>https://hacperme.com/posts/notes/20230819_valgrind_notes/</link>
      <pubDate>Sat, 19 Aug 2023 00:38:26 +0800</pubDate>
      <guid>https://hacperme.com/posts/notes/20230819_valgrind_notes/</guid>
      <description>介绍 valgrind 是一套工具集，常用于检测软件内存泄漏和分析软件性能问题。本文只记录使用 valgrind 检测内存相关问题的示例。 valgrind 使用 使用 valgrind 调用将要测试的程序，加上参</description>
      <content:encoded><![CDATA[<h2 id="介绍">介绍</h2>
<p>valgrind 是一套工具集，常用于检测软件内存泄漏和分析软件性能问题。本文只记录使用 valgrind 检测内存相关问题的示例。</p>
<h2 id="valgrind-使用">valgrind 使用</h2>
<p>使用 valgrind 调用将要测试的程序，加上参数 <code>--leak-check=full --show-leak-kinds=all</code>, 如下面示例，检测 test 程序有没有问题。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">valgrind --leak-check<span class="o">=</span>full --show-leak-kinds<span class="o">=</span>all ./test
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="常见内存问题">常见内存问题</h2>
<ol>
<li>内存泄漏</li>
</ol>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">test_memory_leak</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kt">char</span> <span class="o">*</span><span class="n">test_data</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">test_data</span> <span class="o">=</span> <span class="nf">malloc</span><span class="p">(</span><span class="mi">1024</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">memset</span><span class="p">(</span><span class="n">test_data</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1024</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">sprintf</span><span class="p">(</span><span class="n">test_data</span><span class="p">,</span> <span class="s">&#34;[test]</span><span class="se">\r\n</span><span class="s">key=123</span><span class="se">\r\n</span><span class="s">&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">printf</span><span class="p">(</span><span class="s">&#34;test_data:%s</span><span class="se">\r\n</span><span class="s">&#34;</span><span class="p">,</span> <span class="n">test_data</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">valgrind --leak-check<span class="o">=</span>full --show-leak-kinds<span class="o">=</span>all ./build/build_out/target/test
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span> Memcheck, a memory error <span class="nv">detector</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span> Copyright <span class="o">(</span>C<span class="o">)</span> 2002-2017, and GNU GPL<span class="err">&#39;</span>d, by Julian Seward et al.
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span> Using Valgrind-3.15.0 and LibVEX<span class="p">;</span> rerun with -h <span class="k">for</span> copyright <span class="nv">info</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span> Command: ./build/build_out/target/test
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span>
</span></span><span class="line"><span class="cl">test_data:<span class="o">[</span>test<span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="nv">key</span><span class="o">=</span><span class="m">123</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">test</span> count:36, <span class="nb">test</span> passed:36, 100.00%
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span> 
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span> HEAP SUMMARY:
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span>     in use at exit: 1,024 bytes in <span class="m">1</span> <span class="nv">blocks</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span>   total heap usage: <span class="m">181</span> allocs, <span class="m">180</span> frees, 28,748 bytes <span class="nv">allocated</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span> 1,024 bytes in <span class="m">1</span> blocks are definitely lost in loss record <span class="m">1</span> of <span class="nv">1</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span>    at 0x483B7F3: malloc <span class="o">(</span>in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span>    by 0x10A59C: test_memory_leak <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span>    by 0x10A600: test_parser <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span>    by 0x10A61B: main <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span> LEAK SUMMARY:
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span>    definitely lost: 1,024 bytes in <span class="m">1</span> <span class="nv">blocks</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span>    indirectly lost: <span class="m">0</span> bytes in <span class="m">0</span> <span class="nv">blocks</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span>      possibly lost: <span class="m">0</span> bytes in <span class="m">0</span> <span class="nv">blocks</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span>    still reachable: <span class="m">0</span> bytes in <span class="m">0</span> <span class="nv">blocks</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span>         suppressed: <span class="m">0</span> bytes in <span class="m">0</span> <span class="nv">blocks</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span> For lists of detected and suppressed errors, rerun with: -s
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">344</span><span class="o">==</span> ERROR SUMMARY: <span class="m">1</span> errors from <span class="m">1</span> contexts <span class="o">(</span>suppressed: <span class="m">0</span> from 0<span class="o">)</span>
</span></span></code></pre></td></tr></table>
</div>
</div><ol start="2">
<li>
<p>内存越界</p>
<p>写越界</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">test_memory</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="c1">// 内存越界示例
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="kt">char</span> <span class="o">*</span><span class="n">test_data</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">test_data</span> <span class="o">=</span> <span class="nf">malloc</span><span class="p">(</span><span class="mi">10</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">memset</span><span class="p">(</span><span class="n">test_data</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">strcpy</span><span class="p">(</span><span class="n">test_data</span><span class="p">,</span> <span class="s">&#34;test&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">test_data</span><span class="p">[</span><span class="mi">10</span><span class="p">]</span> <span class="o">=</span> <span class="sc">&#39;\0&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nf">free</span><span class="p">(</span><span class="n">test_data</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">valgrind --leak-check<span class="o">=</span>full --show-leak-kinds<span class="o">=</span>all ./build/build_out/target/test
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">56</span><span class="o">==</span> Memcheck, a memory error <span class="nv">detector</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">56</span><span class="o">==</span> Copyright <span class="o">(</span>C<span class="o">)</span> 2002-2017, and GNU GPL<span class="s1">&#39;d, by Julian Seward et al.
</span></span></span><span class="line"><span class="cl"><span class="s1">==56== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
</span></span></span><span class="line"><span class="cl"><span class="s1">==56== Command: ./build/build_out/target/test
</span></span></span><span class="line"><span class="cl"><span class="s1">==56==
</span></span></span><span class="line"><span class="cl"><span class="s1">==56== Invalid write of size 1
</span></span></span><span class="line"><span class="cl"><span class="s1">==56==    at 0x10A5AD: test_memory (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==56==    by 0x10A5D5: test_parser (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==56==    by 0x10A5F0: main (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==56==  Address 0x4a52c3a is 0 bytes after a block of size 10 alloc&#39;</span><span class="nv">d</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">56</span><span class="o">==</span>    at 0x483B7F3: malloc <span class="o">(</span>in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so<span class="o">)</span>       
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">56</span><span class="o">==</span>    by 0x10A57C: test_memory <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">56</span><span class="o">==</span>    by 0x10A5D5: test_parser <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">56</span><span class="o">==</span>    by 0x10A5F0: main <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">56</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="nb">test</span> count:36, <span class="nb">test</span> passed:36, 100.00%
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">56</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">56</span><span class="o">==</span> HEAP SUMMARY:
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">56</span><span class="o">==</span>     in use at exit: <span class="m">0</span> bytes in <span class="m">0</span> <span class="nv">blocks</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">56</span><span class="o">==</span>   total heap usage: <span class="m">181</span> allocs, <span class="m">181</span> frees, 27,734 bytes <span class="nv">allocated</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">56</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">56</span><span class="o">==</span> All heap blocks were freed -- no leaks are <span class="nv">possible</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">56</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">56</span><span class="o">==</span> For lists of detected and suppressed errors, rerun with: -s
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">56</span><span class="o">==</span> ERROR SUMMARY: <span class="m">1</span> errors from <span class="m">1</span> contexts <span class="o">(</span>suppressed: <span class="m">0</span> from 0<span class="o">)</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>读越界</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">test_memory</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kt">char</span> <span class="o">*</span><span class="n">test_data</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">test_data</span> <span class="o">=</span> <span class="nf">malloc</span><span class="p">(</span><span class="mi">10</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">memset</span><span class="p">(</span><span class="n">test_data</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">strcpy</span><span class="p">(</span><span class="n">test_data</span><span class="p">,</span> <span class="s">&#34;test&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">printf</span><span class="p">(</span><span class="s">&#34;test_data:%c</span><span class="se">\r\n</span><span class="s">&#34;</span><span class="p">,</span> <span class="n">test_data</span><span class="p">[</span><span class="mi">10</span><span class="p">]);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">free</span><span class="p">(</span><span class="n">test_data</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">valgrind --leak-check<span class="o">=</span>full --show-leak-kinds<span class="o">=</span>all ./build/build_out/target/test
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">118</span><span class="o">==</span> Memcheck, a memory error <span class="nv">detector</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">118</span><span class="o">==</span> Copyright <span class="o">(</span>C<span class="o">)</span> 2002-2017, and GNU GPL<span class="s1">&#39;d, by Julian Seward et al.
</span></span></span><span class="line"><span class="cl"><span class="s1">==118== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
</span></span></span><span class="line"><span class="cl"><span class="s1">==118== Command: ./build/build_out/target/test
</span></span></span><span class="line"><span class="cl"><span class="s1">==118==
</span></span></span><span class="line"><span class="cl"><span class="s1">==118== Invalid read of size 1
</span></span></span><span class="line"><span class="cl"><span class="s1">==118==    at 0x10A5AD: test_memory (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==118==    by 0x10A5EB: test_parser (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==118==    by 0x10A606: main (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==118==  Address 0x4a52c3a is 0 bytes after a block of size 10 alloc&#39;</span><span class="nv">d</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">118</span><span class="o">==</span>    at 0x483B7F3: malloc <span class="o">(</span>in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">118</span><span class="o">==</span>    by 0x10A57C: test_memory <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">118</span><span class="o">==</span>    by 0x10A5EB: test_parser <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">118</span><span class="o">==</span>    by 0x10A606: main <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">118</span><span class="o">==</span>
</span></span><span class="line"><span class="cl">test_data:
</span></span><span class="line"><span class="cl"><span class="nb">test</span> count:36, <span class="nb">test</span> passed:36, 100.00%
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">118</span><span class="o">==</span> 
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">118</span><span class="o">==</span> HEAP SUMMARY:
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">118</span><span class="o">==</span>     in use at exit: <span class="m">0</span> bytes in <span class="m">0</span> <span class="nv">blocks</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">118</span><span class="o">==</span>   total heap usage: <span class="m">181</span> allocs, <span class="m">181</span> frees, 27,734 bytes <span class="nv">allocated</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">118</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">118</span><span class="o">==</span> All heap blocks were freed -- no leaks are <span class="nv">possible</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">118</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">118</span><span class="o">==</span> For lists of detected and suppressed errors, rerun with: -s
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">118</span><span class="o">==</span> ERROR SUMMARY: <span class="m">1</span> errors from <span class="m">1</span> contexts <span class="o">(</span>suppressed: <span class="m">0</span> from 0<span class="o">)</span>
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p>double free</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">test_memory</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kt">char</span> <span class="o">*</span><span class="n">test_data</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">test_data</span> <span class="o">=</span> <span class="nf">malloc</span><span class="p">(</span><span class="mi">10</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">memset</span><span class="p">(</span><span class="n">test_data</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">strcpy</span><span class="p">(</span><span class="n">test_data</span><span class="p">,</span> <span class="s">&#34;test&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">free</span><span class="p">(</span><span class="n">test_data</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">free</span><span class="p">(</span><span class="n">test_data</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">valgrind --leak-check<span class="o">=</span>full --show-leak-kinds<span class="o">=</span>all ./build/build_out/target/test
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span> Memcheck, a memory error <span class="nv">detector</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span> Copyright <span class="o">(</span>C<span class="o">)</span> 2002-2017, and GNU GPL<span class="s1">&#39;d, by Julian Seward et al.
</span></span></span><span class="line"><span class="cl"><span class="s1">==177== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
</span></span></span><span class="line"><span class="cl"><span class="s1">==177== Command: ./build/build_out/target/test
</span></span></span><span class="line"><span class="cl"><span class="s1">==177==
</span></span></span><span class="line"><span class="cl"><span class="s1">==177== Invalid free() / delete / delete[] / realloc()
</span></span></span><span class="line"><span class="cl"><span class="s1">==177==    at 0x483CA3F: free (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
</span></span></span><span class="line"><span class="cl"><span class="s1">==177==    by 0x10A5BC: test_memory (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==177==    by 0x10A5D6: test_parser (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==177==    by 0x10A5F1: main (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==177==  Address 0x4a52c30 is 0 bytes inside a block of size 10 free&#39;</span><span class="nv">d</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span>    at 0x483CA3F: free <span class="o">(</span>in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span>    by 0x10A5B0: test_memory <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span>    by 0x10A5D6: test_parser <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span>    by 0x10A5F1: main <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span>  Block was alloc<span class="err">&#39;</span>d <span class="nv">at</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span>    at 0x483B7F3: malloc <span class="o">(</span>in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span>    by 0x10A57C: test_memory <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span>    by 0x10A5D6: test_parser <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span>    by 0x10A5F1: main <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="nb">test</span> count:36, <span class="nb">test</span> passed:36, 100.00%
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span> 
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span> HEAP SUMMARY:
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span>     in use at exit: <span class="m">0</span> bytes in <span class="m">0</span> <span class="nv">blocks</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span>   total heap usage: <span class="m">181</span> allocs, <span class="m">182</span> frees, 27,734 bytes <span class="nv">allocated</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span> All heap blocks were freed -- no leaks are <span class="nv">possible</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span> For lists of detected and suppressed errors, rerun with: -s
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">177</span><span class="o">==</span> ERROR SUMMARY: <span class="m">1</span> errors from <span class="m">1</span> contexts <span class="o">(</span>suppressed: <span class="m">0</span> from 0<span class="o">)</span>
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p>use after free</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">test_memory</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kt">char</span> <span class="o">*</span><span class="n">test_data</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">test_data</span> <span class="o">=</span> <span class="nf">malloc</span><span class="p">(</span><span class="mi">10</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">memset</span><span class="p">(</span><span class="n">test_data</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">strcpy</span><span class="p">(</span><span class="n">test_data</span><span class="p">,</span> <span class="s">&#34;test&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">free</span><span class="p">(</span><span class="n">test_data</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">printf</span><span class="p">(</span><span class="s">&#34;test_data:%s</span><span class="se">\r\n</span><span class="s">&#34;</span><span class="p">,</span> <span class="n">test_data</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">  1
</span><span class="lnt">  2
</span><span class="lnt">  3
</span><span class="lnt">  4
</span><span class="lnt">  5
</span><span class="lnt">  6
</span><span class="lnt">  7
</span><span class="lnt">  8
</span><span class="lnt">  9
</span><span class="lnt"> 10
</span><span class="lnt"> 11
</span><span class="lnt"> 12
</span><span class="lnt"> 13
</span><span class="lnt"> 14
</span><span class="lnt"> 15
</span><span class="lnt"> 16
</span><span class="lnt"> 17
</span><span class="lnt"> 18
</span><span class="lnt"> 19
</span><span class="lnt"> 20
</span><span class="lnt"> 21
</span><span class="lnt"> 22
</span><span class="lnt"> 23
</span><span class="lnt"> 24
</span><span class="lnt"> 25
</span><span class="lnt"> 26
</span><span class="lnt"> 27
</span><span class="lnt"> 28
</span><span class="lnt"> 29
</span><span class="lnt"> 30
</span><span class="lnt"> 31
</span><span class="lnt"> 32
</span><span class="lnt"> 33
</span><span class="lnt"> 34
</span><span class="lnt"> 35
</span><span class="lnt"> 36
</span><span class="lnt"> 37
</span><span class="lnt"> 38
</span><span class="lnt"> 39
</span><span class="lnt"> 40
</span><span class="lnt"> 41
</span><span class="lnt"> 42
</span><span class="lnt"> 43
</span><span class="lnt"> 44
</span><span class="lnt"> 45
</span><span class="lnt"> 46
</span><span class="lnt"> 47
</span><span class="lnt"> 48
</span><span class="lnt"> 49
</span><span class="lnt"> 50
</span><span class="lnt"> 51
</span><span class="lnt"> 52
</span><span class="lnt"> 53
</span><span class="lnt"> 54
</span><span class="lnt"> 55
</span><span class="lnt"> 56
</span><span class="lnt"> 57
</span><span class="lnt"> 58
</span><span class="lnt"> 59
</span><span class="lnt"> 60
</span><span class="lnt"> 61
</span><span class="lnt"> 62
</span><span class="lnt"> 63
</span><span class="lnt"> 64
</span><span class="lnt"> 65
</span><span class="lnt"> 66
</span><span class="lnt"> 67
</span><span class="lnt"> 68
</span><span class="lnt"> 69
</span><span class="lnt"> 70
</span><span class="lnt"> 71
</span><span class="lnt"> 72
</span><span class="lnt"> 73
</span><span class="lnt"> 74
</span><span class="lnt"> 75
</span><span class="lnt"> 76
</span><span class="lnt"> 77
</span><span class="lnt"> 78
</span><span class="lnt"> 79
</span><span class="lnt"> 80
</span><span class="lnt"> 81
</span><span class="lnt"> 82
</span><span class="lnt"> 83
</span><span class="lnt"> 84
</span><span class="lnt"> 85
</span><span class="lnt"> 86
</span><span class="lnt"> 87
</span><span class="lnt"> 88
</span><span class="lnt"> 89
</span><span class="lnt"> 90
</span><span class="lnt"> 91
</span><span class="lnt"> 92
</span><span class="lnt"> 93
</span><span class="lnt"> 94
</span><span class="lnt"> 95
</span><span class="lnt"> 96
</span><span class="lnt"> 97
</span><span class="lnt"> 98
</span><span class="lnt"> 99
</span><span class="lnt">100
</span><span class="lnt">101
</span><span class="lnt">102
</span><span class="lnt">103
</span><span class="lnt">104
</span><span class="lnt">105
</span><span class="lnt">106
</span><span class="lnt">107
</span><span class="lnt">108
</span><span class="lnt">109
</span><span class="lnt">110
</span><span class="lnt">111
</span><span class="lnt">112
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">valgrind --leak-check<span class="o">=</span>full --show-leak-kinds<span class="o">=</span>all ./build/build_out/target/test
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span> Memcheck, a memory error <span class="nv">detector</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span> Copyright <span class="o">(</span>C<span class="o">)</span> 2002-2017, and GNU GPL<span class="s1">&#39;d, by Julian Seward et al.
</span></span></span><span class="line"><span class="cl"><span class="s1">==330== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
</span></span></span><span class="line"><span class="cl"><span class="s1">==330== Command: ./build/build_out/target/test
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==
</span></span></span><span class="line"><span class="cl"><span class="s1">==330== Invalid read of size 1
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    at 0x483EF46: strlen (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x48CCD14: __vfprintf_internal (vfprintf-internal.c:1688)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x48B5D3E: printf (printf.c:33)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5C8: test_memory (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5E2: test_parser (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5FD: main (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==  Address 0x4a52c30 is 0 bytes inside a block of size 10 free&#39;</span><span class="nv">d</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    at 0x483CA3F: free <span class="o">(</span>in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    by 0x10A5B0: test_memory <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    by 0x10A5E2: test_parser <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    by 0x10A5FD: main <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>  Block was alloc<span class="s1">&#39;d at
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A57C: test_memory (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5E2: test_parser (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5FD: main (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==
</span></span></span><span class="line"><span class="cl"><span class="s1">==330== Invalid read of size 1
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    at 0x483EF54: strlen (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x48CCD14: __vfprintf_internal (vfprintf-internal.c:1688)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x48B5D3E: printf (printf.c:33)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5C8: test_memory (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5E2: test_parser (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5FD: main (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==  Address 0x4a52c31 is 1 bytes inside a block of size 10 free&#39;</span><span class="nv">d</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    at 0x483CA3F: free <span class="o">(</span>in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    by 0x10A5B0: test_memory <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    by 0x10A5E2: test_parser <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    by 0x10A5FD: main <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>  Block was alloc<span class="s1">&#39;d at
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A57C: test_memory (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5E2: test_parser (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5FD: main (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==
</span></span></span><span class="line"><span class="cl"><span class="s1">==330== Invalid read of size 1
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    at 0x48E370C: _IO_new_file_xsputn (fileops.c:1219)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x48E370C: _IO_file_xsputn@@GLIBC_2.2.5 (fileops.c:1197)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x48CB0FB: __vfprintf_internal (vfprintf-internal.c:1688)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x48B5D3E: printf (printf.c:33)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5C8: test_memory (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5E2: test_parser (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5FD: main (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==  Address 0x4a52c33 is 3 bytes inside a block of size 10 free&#39;</span><span class="nv">d</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    at 0x483CA3F: free <span class="o">(</span>in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    by 0x10A5B0: test_memory <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    by 0x10A5E2: test_parser <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    by 0x10A5FD: main <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>  Block was alloc<span class="s1">&#39;d at
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A57C: test_memory (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5E2: test_parser (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5FD: main (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==
</span></span></span><span class="line"><span class="cl"><span class="s1">==330== Invalid read of size 1
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    at 0x48436A0: mempcpy (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x48E3631: _IO_new_file_xsputn (fileops.c:1236)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x48E3631: _IO_file_xsputn@@GLIBC_2.2.5 (fileops.c:1197)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x48CB0FB: __vfprintf_internal (vfprintf-internal.c:1688)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x48B5D3E: printf (printf.c:33)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5C8: test_memory (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5E2: test_parser (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5FD: main (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==  Address 0x4a52c33 is 3 bytes inside a block of size 10 free&#39;</span><span class="nv">d</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    at 0x483CA3F: free <span class="o">(</span>in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    by 0x10A5B0: test_memory <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    by 0x10A5E2: test_parser <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    by 0x10A5FD: main <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>  Block was alloc<span class="s1">&#39;d at
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A57C: test_memory (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5E2: test_parser (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5FD: main (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==
</span></span></span><span class="line"><span class="cl"><span class="s1">==330== Invalid read of size 1
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    at 0x48436B2: mempcpy (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x48E3631: _IO_new_file_xsputn (fileops.c:1236)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x48E3631: _IO_file_xsputn@@GLIBC_2.2.5 (fileops.c:1197)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x48CB0FB: __vfprintf_internal (vfprintf-internal.c:1688)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x48B5D3E: printf (printf.c:33)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5C8: test_memory (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5E2: test_parser (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==    by 0x10A5FD: main (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==330==  Address 0x4a52c31 is 1 bytes inside a block of size 10 free&#39;</span><span class="nv">d</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    at 0x483CA3F: free <span class="o">(</span>in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    by 0x10A5B0: test_memory <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    by 0x10A5E2: test_parser <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    by 0x10A5FD: main <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>  Block was alloc<span class="err">&#39;</span>d <span class="nv">at</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    at 0x483B7F3: malloc <span class="o">(</span>in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    by 0x10A57C: test_memory <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    by 0x10A5E2: test_parser <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>    by 0x10A5FD: main <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>
</span></span><span class="line"><span class="cl">test_data:test
</span></span><span class="line"><span class="cl"><span class="nb">test</span> count:36, <span class="nb">test</span> passed:36, 100.00%
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span> 
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span> HEAP SUMMARY:
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>     in use at exit: <span class="m">0</span> bytes in <span class="m">0</span> <span class="nv">blocks</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>   total heap usage: <span class="m">181</span> allocs, <span class="m">181</span> frees, 27,734 bytes <span class="nv">allocated</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span> All heap blocks were freed -- no leaks are <span class="nv">possible</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span> For lists of detected and suppressed errors, rerun with: -s
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">330</span><span class="o">==</span> ERROR SUMMARY: <span class="m">13</span> errors from <span class="m">5</span> contexts <span class="o">(</span>suppressed: <span class="m">0</span> from 0<span class="o">)</span>
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p>free 不存在的地址</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">test_memory</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kt">char</span> <span class="o">*</span><span class="n">test_data</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">test_data</span> <span class="o">=</span> <span class="nf">malloc</span><span class="p">(</span><span class="mi">10</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">memset</span><span class="p">(</span><span class="n">test_data</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">strcpy</span><span class="p">(</span><span class="n">test_data</span><span class="p">,</span> <span class="s">&#34;test&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">test_data</span><span class="o">++</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nf">free</span><span class="p">(</span><span class="n">test_data</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">valgrind --leak-check<span class="o">=</span>full --show-leak-kinds<span class="o">=</span>all ./build/build_out/target/test
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span> Memcheck, a memory error <span class="nv">detector</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span> Copyright <span class="o">(</span>C<span class="o">)</span> 2002-2017, and GNU GPL<span class="s1">&#39;d, by Julian Seward et al.
</span></span></span><span class="line"><span class="cl"><span class="s1">==395== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
</span></span></span><span class="line"><span class="cl"><span class="s1">==395== Command: ./build/build_out/target/test
</span></span></span><span class="line"><span class="cl"><span class="s1">==395==
</span></span></span><span class="line"><span class="cl"><span class="s1">==395== Invalid free() / delete / delete[] / realloc()
</span></span></span><span class="line"><span class="cl"><span class="s1">==395==    at 0x483CA3F: free (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
</span></span></span><span class="line"><span class="cl"><span class="s1">==395==    by 0x10A5B5: test_memory (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==395==    by 0x10A5CF: test_parser (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==395==    by 0x10A5EA: main (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==395==  Address 0x4a52c31 is 1 bytes inside a block of size 10 alloc&#39;</span><span class="nv">d</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span>    at 0x483B7F3: malloc <span class="o">(</span>in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span>    by 0x10A57C: test_memory <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span>    by 0x10A5CF: test_parser <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span>    by 0x10A5EA: main <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="nb">test</span> count:36, <span class="nb">test</span> passed:36, 100.00%
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span> HEAP SUMMARY:
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span>     in use at exit: <span class="m">10</span> bytes in <span class="m">1</span> <span class="nv">blocks</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span>   total heap usage: <span class="m">181</span> allocs, <span class="m">181</span> frees, 27,734 bytes <span class="nv">allocated</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span> <span class="m">10</span> bytes in <span class="m">1</span> blocks are definitely lost in loss record <span class="m">1</span> of <span class="nv">1</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span>    at 0x483B7F3: malloc <span class="o">(</span>in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span>    by 0x10A57C: test_memory <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span>    by 0x10A5CF: test_parser <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span>    by 0x10A5EA: main <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span> LEAK SUMMARY:
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span>    definitely lost: <span class="m">10</span> bytes in <span class="m">1</span> <span class="nv">blocks</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span>    indirectly lost: <span class="m">0</span> bytes in <span class="m">0</span> <span class="nv">blocks</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span>      possibly lost: <span class="m">0</span> bytes in <span class="m">0</span> <span class="nv">blocks</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span>    still reachable: <span class="m">0</span> bytes in <span class="m">0</span> <span class="nv">blocks</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span>         suppressed: <span class="m">0</span> bytes in <span class="m">0</span> <span class="nv">blocks</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span> For lists of detected and suppressed errors, rerun with: -s
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">395</span><span class="o">==</span> ERROR SUMMARY: <span class="m">2</span> errors from <span class="m">2</span> contexts <span class="o">(</span>suppressed: <span class="m">0</span> from 0<span class="o">)</span>
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p>访问非法地址</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="k">static</span> <span class="kt">void</span> <span class="nf">test_parser</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nf">test_parser_normal</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">    <span class="c1">// test abnormal
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="nf">test_parser_abnormal</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">    <span class="nf">test_memory</span><span class="p">();</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">valgrind --leak-check<span class="o">=</span>full --show-leak-kinds<span class="o">=</span>all ./build/build_out/target/test
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span> Memcheck, a memory error <span class="nv">detector</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span> Copyright <span class="o">(</span>C<span class="o">)</span> 2002-2017, and GNU GPL<span class="s1">&#39;d, by Julian Seward et al.
</span></span></span><span class="line"><span class="cl"><span class="s1">==480== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
</span></span></span><span class="line"><span class="cl"><span class="s1">==480== Command: ./build/build_out/target/test
</span></span></span><span class="line"><span class="cl"><span class="s1">==480==
</span></span></span><span class="line"><span class="cl"><span class="s1">==480== Invalid write of size 1
</span></span></span><span class="line"><span class="cl"><span class="s1">==480==    at 0x10A577: test_memory (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==480==    by 0x10A593: test_parser (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==480==    by 0x10A5AE: main (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==480==  Address 0x23444 is not stack&#39;</span>d, malloc<span class="s1">&#39;d or (recently) free&#39;</span><span class="nv">d</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span> Process terminating with default action of signal <span class="m">11</span> <span class="o">(</span>SIGSEGV<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span>  Access not within mapped region at address <span class="nv">0x23444</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span>    at 0x10A577: test_memory <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span>    by 0x10A593: test_parser <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span>    by 0x10A5AE: main <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span>  If you believe this happened as a result of a <span class="nv">stack</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span>  overflow in your program<span class="err">&#39;</span>s main thread <span class="o">(</span>unlikely <span class="nv">but</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span>  possible<span class="o">)</span>, you can try to increase the size of <span class="nv">the</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span>  main thread stack using the --main-stacksize<span class="o">=</span> flag.
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span>  The main thread stack size used in this run was 8388608.
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span> 
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span> HEAP SUMMARY:
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span>     in use at exit: <span class="m">0</span> bytes in <span class="m">0</span> <span class="nv">blocks</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span>   total heap usage: <span class="m">179</span> allocs, <span class="m">179</span> frees, 26,700 bytes <span class="nv">allocated</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span> All heap blocks were freed -- no leaks are <span class="nv">possible</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span> For lists of detected and suppressed errors, rerun with: -s
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">480</span><span class="o">==</span> ERROR SUMMARY: <span class="m">1</span> errors from <span class="m">1</span> contexts <span class="o">(</span>suppressed: <span class="m">0</span> from 0<span class="o">)</span>
</span></span><span class="line"><span class="cl">make: *** <span class="o">[</span>Makefile:12: memcheck<span class="o">]</span> Segmentation fault
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p>局部变量越界</p>
<p>写越界</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">test_memory</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kt">char</span> <span class="n">test_data</span><span class="p">[</span><span class="mi">10</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="nf">sprintf</span><span class="p">(</span><span class="n">test_data</span><span class="p">,</span> <span class="s">&#34;test333333333333333333&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">printf</span> <span class="p">(</span><span class="s">&#34;%s</span><span class="se">\r\n</span><span class="s">&#34;</span><span class="p">,</span> <span class="n">test_data</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">valgrind --leak-check<span class="o">=</span>full --show-leak-kinds<span class="o">=</span>all ./build/build_out/target/test
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span> Memcheck, a memory error <span class="nv">detector</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span> Copyright <span class="o">(</span>C<span class="o">)</span> 2002-2017, and GNU GPL<span class="err">&#39;</span>d, by Julian Seward et al.
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span> Using Valgrind-3.15.0 and LibVEX<span class="p">;</span> rerun with -h <span class="k">for</span> copyright <span class="nv">info</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span> Command: ./build/build_out/target/test
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span>
</span></span><span class="line"><span class="cl">test333333333333333333
</span></span><span class="line"><span class="cl">*** stack smashing detected ***: <span class="nv">terminated</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span> Process terminating with default action of signal <span class="m">6</span> <span class="o">(</span>SIGABRT<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span>    at 0x489700B: raise <span class="o">(</span>raise.c:51<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span>    by 0x4876858: abort <span class="o">(</span>abort.c:79<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span>    by 0x48E126D: __libc_message <span class="o">(</span>libc_fatal.c:155<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span>    by 0x4983AB9: __fortify_fail <span class="o">(</span>fortify_fail.c:26<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span>    by 0x4983A85: __stack_chk_fail <span class="o">(</span>stack_chk_fail.c:24<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span>    by 0x10A5EC: test_memory <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span>    by 0x10A605: test_parser <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span>    by 0x1FFEFFFE4F: ???
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span>    by 0x10A620: main <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span> HEAP SUMMARY:
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span>     in use at exit: <span class="m">0</span> bytes in <span class="m">0</span> <span class="nv">blocks</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span>   total heap usage: <span class="m">180</span> allocs, <span class="m">180</span> frees, 27,724 bytes <span class="nv">allocated</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span> All heap blocks were freed -- no leaks are <span class="nv">possible</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span> For lists of detected and suppressed errors, rerun with: -s
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">527</span><span class="o">==</span> ERROR SUMMARY: <span class="m">0</span> errors from <span class="m">0</span> contexts <span class="o">(</span>suppressed: <span class="m">0</span> from 0<span class="o">)</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>读越界</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">test_memory</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kt">char</span> <span class="n">test_data</span><span class="p">[</span><span class="mi">100</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="nf">sprintf</span><span class="p">(</span><span class="n">test_data</span><span class="p">,</span> <span class="s">&#34;test333333333333333333&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">printf</span> <span class="p">(</span><span class="s">&#34;%c</span><span class="se">\r\n</span><span class="s">&#34;</span><span class="p">,</span> <span class="n">test_data</span><span class="p">[</span><span class="mi">100</span><span class="p">]);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span><span class="lnt">50
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">valgrind --leak-check<span class="o">=</span>full --show-leak-kinds<span class="o">=</span>all ./build/build_out/target/test
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span> Memcheck, a memory error <span class="nv">detector</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span> Copyright <span class="o">(</span>C<span class="o">)</span> 2002-2017, and GNU GPL<span class="s1">&#39;d, by Julian Seward et al.
</span></span></span><span class="line"><span class="cl"><span class="s1">==571== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
</span></span></span><span class="line"><span class="cl"><span class="s1">==571== Command: ./build/build_out/target/test
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==
</span></span></span><span class="line"><span class="cl"><span class="s1">==571== Conditional jump or move depends on uninitialised value(s)
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==    at 0x48E4DDD: _IO_file_overflow@@GLIBC_2.2.5 (fileops.c:783)
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==    by 0x48CD8ED: __vfprintf_internal (vfprintf-internal.c:1688)
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==    by 0x48B5D3E: printf (printf.c:33)
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==    by 0x10A632: test_memory (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==    by 0x10A660: test_parser (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==    by 0x10A67B: main (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==
</span></span></span><span class="line"><span class="cl"><span class="s1">==571== Syscall param write(buf) points to uninitialised byte(s)
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==    at 0x4962077: write (write.c:26)
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==    by 0x48E2E8C: _IO_file_write@@GLIBC_2.2.5 (fileops.c:1181)
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==    by 0x48E4950: new_do_write (fileops.c:449)
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==    by 0x48E4950: _IO_new_do_write (fileops.c:426)
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==    by 0x48E4950: _IO_do_write@@GLIBC_2.2.5 (fileops.c:423)
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==    by 0x48E36B4: _IO_new_file_xsputn (fileops.c:1244)
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==    by 0x48E36B4: _IO_file_xsputn@@GLIBC_2.2.5 (fileops.c:1197)
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==    by 0x48CAFE5: __vfprintf_internal (vfprintf-internal.c:1719)
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==    by 0x48B5D3E: printf (printf.c:33)
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==    by 0x10A632: test_memory (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==    by 0x10A660: test_parser (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==    by 0x10A67B: main (in /mnt/d/workspace/lwiniparser/build/build_out/target/test)
</span></span></span><span class="line"><span class="cl"><span class="s1">==571==  Address 0x4a52c30 is 0 bytes inside a block of size 1,024 alloc&#39;</span><span class="nv">d</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span>    at 0x483B7F3: malloc <span class="o">(</span>in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span>    by 0x48D5D03: _IO_file_doallocate <span class="o">(</span>filedoalloc.c:101<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span>    by 0x48E5ECF: _IO_doallocbuf <span class="o">(</span>genops.c:347<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span>    by 0x48E4F2F: _IO_file_overflow@@GLIBC_2.2.5 <span class="o">(</span>fileops.c:745<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span>    by 0x48CD8ED: __vfprintf_internal <span class="o">(</span>vfprintf-internal.c:1688<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span>    by 0x48B5D3E: <span class="nb">printf</span> <span class="o">(</span>printf.c:33<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span>    by 0x10A632: test_memory <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span>    by 0x10A660: test_parser <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span>    by 0x10A67B: main <span class="o">(</span>in /mnt/d/workspace/lwiniparser/build/build_out/target/test<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">test</span> count:36, <span class="nb">test</span> passed:36, 100.00%
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span> 
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span> HEAP SUMMARY:
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span>     in use at exit: <span class="m">0</span> bytes in <span class="m">0</span> <span class="nv">blocks</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span>   total heap usage: <span class="m">180</span> allocs, <span class="m">180</span> frees, 27,724 bytes <span class="nv">allocated</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span> All heap blocks were freed -- no leaks are <span class="nv">possible</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span> Use --track-origins<span class="o">=</span>yes to see where uninitialised values come <span class="nv">from</span>
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span> For lists of detected and suppressed errors, rerun with: -s
</span></span><span class="line"><span class="cl"><span class="o">==</span><span class="nv">571</span><span class="o">==</span> ERROR SUMMARY: <span class="m">2</span> errors from <span class="m">2</span> contexts <span class="o">(</span>suppressed: <span class="m">0</span> from 0<span class="o">)</span>
</span></span></code></pre></td></tr></table>
</div>
</div></li>
</ol>
]]></content:encoded>
    </item>
  </channel>
</rss>
