<?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>C&#43;&#43; on zzy2357</title>
    <link>https://zzy2357.github.io/tags/c&#43;&#43;/</link>
    <description>Recent content in C&#43;&#43; on zzy2357</description>
    <image>
      <title>zzy2357</title>
      <url>https://avatars.githubusercontent.com/u/226872255?v=4</url>
      <link>https://avatars.githubusercontent.com/u/226872255?v=4</link>
    </image>
    <generator>Hugo -- 0.164.0</generator>
    <language>zh-cn</language>
    <lastBuildDate>Mon, 13 Jul 2026 18:20:00 +0800</lastBuildDate>
    <atom:link href="https://zzy2357.github.io/tags/c++/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>MinGW-w64 编译通过运行崩？Code Runner 踩坑记</title>
      <link>https://zzy2357.github.io/posts/cpp-mingw-segfault/</link>
      <pubDate>Mon, 13 Jul 2026 18:20:00 +0800</pubDate>
      <guid>https://zzy2357.github.io/posts/cpp-mingw-segfault/</guid>
      <description>&lt;h2 id=&#34;症状&#34;&gt;症状&lt;/h2&gt;
&lt;p&gt;VS Code 里写了个 hello world：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Hello world!&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Ctrl+Alt+N&lt;/strong&gt;（Code Runner）→ 编译通过 → 运行崩：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[Done] exited with code=3221225477 in 1.097 seconds
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;退出的 &lt;code&gt;3221225477&lt;/code&gt; 就是 &lt;code&gt;0xC0000005&lt;/code&gt;，也就是 &lt;strong&gt;STATUS_ACCESS_VIOLATION&lt;/strong&gt;——俗称段错误（segfault）。&lt;/p&gt;
&lt;p&gt;一个 hello world 能 segfault，说明问题不在代码，在环境。&lt;/p&gt;
&lt;h2 id=&#34;排查&#34;&gt;排查&lt;/h2&gt;
&lt;h3 id=&#34;第一坑路径错了&#34;&gt;第一坑：路径错了&lt;/h3&gt;
&lt;p&gt;看看编译器的实际位置：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ ls /d/Apps/mingw64/mingw64/bin/g++.exe
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;结果是 &lt;strong&gt;MinGW-w64 15.2.0&lt;/strong&gt;（UCRT 版本），而我 Code Runner 里配的是 &lt;code&gt;D:\Apps\TDM-GCC\bin\g++.exe&lt;/code&gt;——一个根本不存在的目录。&lt;/p&gt;
&lt;p&gt;嗯，之前不知道哪个助手写进记忆里的，信了。&lt;/p&gt;
&lt;h3 id=&#34;第二坑运行时缺-dll&#34;&gt;第二坑：运行时缺 DLL&lt;/h3&gt;
&lt;p&gt;路径改对后，编译确实过了，但运行还是崩。手动跑一下试试：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ g++ hello.cpp -o hello.exe -static-libgcc -fexec-charset=gbk
$ ./hello.exe
Segmentation fault
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;查一下编译产物依赖的 DLL：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ objdump -p hello.exe | grep &amp;#34;DLL Name&amp;#34;
    DLL Name: libstdc++-6.dll
    DLL Name: KERNEL32.dll
    DLL Name: api-ms-win-crt-environment-l1-1-0.dll
    DLL Name: api-ms-win-crt-heap-l1-1-0.dll
    ...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;看到了吧——&lt;code&gt;libstdc++-6.dll&lt;/code&gt;。这个 DLL 在 MinGW 的 bin 目录下，但&lt;strong&gt;不在系统的 PATH 里&lt;/strong&gt;。运行时找不到它，直接崩。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C&#43;&#43; String</title>
      <link>https://zzy2357.github.io/posts/cpp-string/</link>
      <pubDate>Mon, 09 Mar 2026 14:31:39 +0800</pubDate>
      <guid>https://zzy2357.github.io/posts/cpp-string/</guid>
      <description>&lt;h2 id=&#34;创建&#34;&gt;创建&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 注意不是 &amp;lt;string.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;转字符数组&#34;&gt;转字符数组&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;string.data()&lt;/code&gt; 不保证末尾有空字符&lt;/li&gt;
&lt;li&gt;&lt;code&gt;string.c_str()&lt;/code&gt; 保证末尾有空字符，建议用这个&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;获取长度&#34;&gt;获取长度&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;string.size()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;string.length()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;strlen(string.c_str())&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;注意！&lt;/p&gt;
&lt;p&gt;这三个函数（以及下面将要提到的 &lt;code&gt;find&lt;/code&gt; 函数）的返回值类型都是 &lt;code&gt;size_t&lt;/code&gt;（&lt;code&gt;unsigned long&lt;/code&gt;）．因此，这些返回值不支持直接与负数比较或运算，建议在需要时进行强制转换．&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;查找&#34;&gt;查找&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;string.find(str, pos = 0)&lt;/code&gt; 查找字符串中一个字符/字符串在含 &lt;code&gt;pos&lt;/code&gt; 之后第一次出现的位置，如果没有出现，则为 &lt;code&gt;string::npos&lt;/code&gt;（类型为 &lt;code&gt;size_t&lt;/code&gt;/&lt;code&gt;unsigned long&lt;/code&gt;，需转换）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;截取&#34;&gt;截取&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;string.substr(pos, len)&lt;/code&gt; 返回从 &lt;code&gt;pos&lt;/code&gt; 位置开始截取最多 &lt;code&gt;len&lt;/code&gt; 个字符组成的字符串&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;插入&#34;&gt;插入&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;string.insert(index, count, char)&lt;/code&gt; 在 &lt;code&gt;index&lt;/code&gt; 处连续插入 &lt;code&gt;count&lt;/code&gt; 个 &lt;code&gt;char&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;string.insert(index, str)&lt;/code&gt; 在 &lt;code&gt;index&lt;/code&gt; 处插入 &lt;code&gt;str&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;擦除&#34;&gt;擦除&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;string.erase(index, count = string.length())&lt;/code&gt; 将从含 &lt;code&gt;index&lt;/code&gt; 开始的 &lt;code&gt;count&lt;/code&gt; 个字符删除&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;替换&#34;&gt;替换&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;string.replace(pos, count, str)&lt;/code&gt; 将从含 &lt;code&gt;pos&lt;/code&gt; 后面的 &lt;code&gt;count&lt;/code&gt; 个字符替换为 &lt;code&gt;str&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;string.replace(first: iterator, last: iterator, str)&lt;/code&gt; 将以含 &lt;code&gt;first&lt;/code&gt; 开始，不含 &lt;code&gt;last&lt;/code&gt; 结束的字串替换为 &lt;code&gt;str&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>C&#43;&#43; Vector</title>
      <link>https://zzy2357.github.io/posts/cpp-vector/</link>
      <pubDate>Mon, 09 Mar 2026 07:54:32 +0800</pubDate>
      <guid>https://zzy2357.github.io/posts/cpp-vector/</guid>
      <description>&lt;h2 id=&#34;创建-vector&#34;&gt;创建 vector&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;vector&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 创建一个初始空间为 3 的 vector，元素默认值为 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 创建一个初始空间为 3 的 vector，元素默认值是 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 创建一个 v2 的拷贝 v3，元素内容和 v2 一样
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 创建一个 v3 的拷贝到 v4，内容是 { v3[1], v3[2] }，包前不包后;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;元素访问&#34;&gt;元素访问&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;vector.at(pos)&lt;/code&gt; 返回 &lt;code&gt;vector&lt;/code&gt; 中下标为 &lt;code&gt;pos&lt;/code&gt; 的引用&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vector[pos]&lt;/code&gt; 返回 &lt;code&gt;vector&lt;/code&gt; 中下标为 &lt;code&gt;pos&lt;/code&gt; 的引用，不执行越界检查&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vector.front()&lt;/code&gt; 返回首元素的引用（&lt;code&gt;vector.begin()&lt;/code&gt; 是迭代器，和这个不同）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vector.back()&lt;/code&gt; 返回末元素的引用 （&lt;code&gt;vector.end()&lt;/code&gt; 是迭代器，没有元素，和这个不同）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vector.data()&lt;/code&gt; 返回首元素的指针（&lt;code&gt;vector&lt;/code&gt; 的空间是连续的）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;迭代器&#34;&gt;迭代器&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;vector.begin()&lt;/code&gt; 返回首元素的迭代器，&lt;code&gt;*begin = front&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vector.end()&lt;/code&gt; 返回末元素的迭代器，没有元素&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vector.rbegin()&lt;/code&gt; 返回指向逆向数组的首元素的迭代器，可以理解为正向容器的末元素&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vector.rend()&lt;/code&gt; 返回指向逆向数组末元素后一位置的迭代器，对应容器首的前一个位置，没有元素&lt;/li&gt;
&lt;li&gt;上述迭代器名前加上一个 &lt;code&gt;c&lt;/code&gt; 为只读迭代器&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;长度和容量&#34;&gt;长度和容量&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;注意，&lt;code&gt;vector&lt;/code&gt; 的长度（size）指有效元素数量，而容量（capacity）指分配的内存长度&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
