title: Problem with strings longer than 15 characters in MinGW
body: <h2>Problem describe</h2>
  
  <p>I have a problem with <code>std::getline()</code> function. I use it like this:</p>
  
  <pre><code>std::fstream f; // opened in read in text mode
  std::string name;
  std::getline(f, name);
  </code></pre>
  
  <p>Everything works good for file with short text inside, f.e.:</p>
  
  <pre><code>example text
  </code></pre>
  
  <p>But when I try to read something longer, f.e.:</p>
  
  <pre><code>example text in file longer than 15
  </code></pre>
  
  <p>I get (after compiling and running):</p>
  
  <pre><code>delete: invalid pointer 00FD7A48 (0040CD22)
  *** Checking for memory corruption: START
  *** Checking for memory corruption: 0 FOUND
  </code></pre>
  
  <h2>Files</h2>
  
  <p>main.cpp:</p>
  
  <pre><code>#include &lt;string&gt;
  #include &lt;cstring&gt;
  #include "plik.h"
  #include "prowadzacy.h"
  
  using namesapce std;
  
  int main(int argc, char** argv) {
      if (argc == 3 &amp;&amp; !strcmp(argv[1], "-f")) {
          Prowadzacy* baza = nullptr;
          string fn(argv[2]);
          czytajZPliku(fn, baza);
      }
  }
  </code></pre>
  
  <p>prowadzacy.h:</p>
  
  <pre><code>#include "przedmiot.h"
  
  struct Prowadzacy {
      std::string imie;
      std::string nazwisko;
  
      Przedmiot* przedmiot = nullptr;
  
      Prowadzacy* next = nullptr;
  };
  </code></pre>
  
  <p>przedmiot.h:</p>
  
  <pre><code>struct Przedmiot {
      std::string nazwa;
      enum Rodzaj {
          WYKLAD, CWICZENIA, LABORATORIUM, PROJEKT, SEMINARIUM
      } rodzaj;
      enum DzienTygodnia {
          PONIEDZIALEK, WTOREK, SRODA, CZWARTEK, PIATEK, SOBOTA, NIEDZIELA
      } dzien_tygodnia;
      int godzina;
      int czas_trwania;
      std::string miejsce;
  
      Przedmiot* next = nullptr;
  };
  </code></pre>
  
  <p>plik.h:</p>
  
  <pre><code>#include &lt;fstream&gt;
  #include &lt;iostream&gt;
  #include "prowadzacy.h"
  #include "przedmiot.h"
  
  bool zapiszDoPliku (const std::string, Prowadzacy*&amp;);
  bool czytajZPliku (const std::string, Prowadzacy*&amp;);
  </code></pre>
  
  <p>plik.cpp:</p>
  
  <pre><code>using namespace std;
  
  bool czytajZPliku (const string fn, Prowadzacy*&amp; baza) {
      fstream f;
      f.open(fn, ios::in);
      if (f) {
          string typ;
          Prowadzacy* p = baza;
  
          while (getline(f, typ, ' ')) {
              cout &lt;&lt; typ &lt;&lt; endl;
              if (typ.find("[prowadzacy]") != string::npos) {
                  string imie, nazwisko;
                  while (p != nullptr)
                      p = p-&gt;next;
                  getline(f, imie, ',');
                  getline(f, nazwisko);
                  dodajProwadzacego(imie, nazwisko, baza);
              } else if (typ.find("[przedmiot]") != string::npos) {
                  string nazwa;
                  getline(f, nazwa);
              }
          }
          f.close();
          return true;
      }
      return false;
  }
  </code></pre>
  
  <p>file with data I need to get:</p>
  
  <pre><code>[prowadzacy] Jan,Nowak
  [przedmiot] Informatyka w Technologii
  </code></pre>
  
  <p>I use Makefile and MinGW. Compile with flags <code>-std=c++14 -O3 -g -pedantic-errors</code></p>
  
  <h2>Problem update</h2>
  
  <p>I write simple new program:</p>
  
  <pre><code>#include &lt;string&gt;
  #include &lt;iostream&gt;
  int main () {
      std::string str = "123456789012345";
      std::cout &lt;&lt; str &lt;&lt; std::endl;
      return 0;
  }
  </code></pre>
  
  <p>I have no trouble compiling and running these. But when I change its code to:</p>
  
  <pre><code>#include &lt;string&gt;
  #include &lt;iostream&gt;
  int main () {
      std::string str = "1234567890123456";
      std::cout &lt;&lt; str &lt;&lt; std::endl;
      return 0;
  }
  </code></pre>
  
  <p>I get:</p>
  
  <pre><code>1234567890123456
  delete: invalid pointer 00F27F48 (004157B0)
  *** Checking for memory corruption: START
  *** Checking for memory corruption: 0 FOUND
  </code></pre>
  
  <p>In Visual Studio everything works fine. Why in MinGW it doesn't work?</p>
  
  <p>Compile with:
  <code>g++ -std=c++14 -pedantic-errors -Wall -Wextra -O3 -g -pedantic-errors -o main main.cpp</code></p>
  
  <p>Update: I tested this on Linux too. On Linux everything is fine. Problem is only in MinGW on Windows.</p>
  
  <h2>Solution</h2>
  
  <p>Adding <code>-std=c++14</code> into compillation command fix this problem.</p>