title: Memory of local variables gets reallocated - why
body: <p>
  Hello folks,<br/></p>
  
  <p>i'm trying to implement a function, that is supposed to read a binary file.<br/>
  At a certain point in the code, i always get a memory access error.<br/>
  I already know, that it is because the memory addresses of my local variables change, after i call a certain function, even though the function has nothing to do with my local variables.<br/>
  May anyone be able to tell me what i'm doing wrong?<br/>
  Here's my code:<br/></p>
  
  <pre class="lang-cpp prettyprint-override"><code>#include &lt;iostream&gt;
  #include &lt;fstream&gt;
  #include &lt;string&gt;
  #include &lt;algorithm&gt;
  #include &lt;cstdint&gt;
  
  
  //all Blocks from .sum in form of struct
  struct HMDSPEC{
    int value1;
    int value2;
  };
  
  struct TIME{
    double value;
    std::string dimension;
  };
  
  struct DATE{
    int day;
    std::string month;
    int year;
  };
  
  //global variables
  
  HMDSPEC hmdspec;
  TIME scheduledTime;
  DATE date;
  
  
  void EraseSpaces(char* arr,std::string &amp;s) {
    for(int i = 0; i &lt; 8 ;i++){
      if(std::isspace(arr[i])){
        arr[i]='\0';
      }
    }
    s=std::string(arr);
  }
  
  void readHMDSPEC(std::ifstream &amp;reader){
    std::cout&lt;&lt;"in HMDSPEC -&gt; Adresse von reader : " &lt;&lt; &amp;reader &lt;&lt; std::endl;
    std::cout &lt;&lt; &amp;hmdspec&lt;&lt;std::endl;
    std::cout &lt;&lt; &amp;hmdspec.value1 &lt;&lt; std::endl;
    std::cout &lt;&lt; &amp;hmdspec.value2 &lt;&lt; std::endl;
    int sizeOfhmdspecBody;
    reader.read(reinterpret_cast&lt;char *&gt;(&amp;sizeOfhmdspecBody), 8);
    std::cout&lt;&lt;"in HMDSPEC nach 1st lesen-&gt; Adresse von reader : " &lt;&lt; &amp;reader &lt;&lt; std::endl;
    std::cout &lt;&lt; &amp;sizeOfhmdspecBody &lt;&lt; std::endl;
    reader.read(reinterpret_cast&lt;char *&gt;(&amp;hmdspec.value1), sizeOfhmdspecBody/2);
    std::cout&lt;&lt;"in HMDSPEC nach 2nd lesen-&gt; Adresse von reader : " &lt;&lt; &amp;reader &lt;&lt; std::endl;
    std::cout &lt;&lt; &amp;hmdspec&lt;&lt;std::endl;
    std::cout &lt;&lt; &amp;hmdspec.value1 &lt;&lt; std::endl;
    reader.read(reinterpret_cast&lt;char *&gt;(&amp;hmdspec.value2), sizeOfhmdspecBody/2);
    std::cout&lt;&lt;"in HMDSPEC nach 3rd lesen-&gt; Adresse von reader : " &lt;&lt; &amp;reader &lt;&lt; std::endl;
    std::cout &lt;&lt; &amp;hmdspec.value2 &lt;&lt; std::endl;
  }
  
  void readTIME(char *word, std::ifstream &amp;reader){
    reader.read(word,8);
    reader.read(reinterpret_cast&lt;char *&gt;(&amp;scheduledTime.value),8);
    reader.read(word, 8);
    EraseSpaces(word,scheduledTime.dimension);
  }
  
  
  
  void RcppReadSumBin(std::string fname)
  {
    std::ifstream reader(fname,std::ios::binary|std::ios::in);
    std::string s;
    s.reserve(512);
    char word[8];
    std::cout&lt;&lt;"Nach deklaration -&gt; Adresse von word : " &lt;&lt; &amp;word &lt;&lt; std::endl;
    std::cout&lt;&lt;"Nach deklaration -&gt; Adresse von s : " &lt;&lt; &amp;s &lt;&lt; std::endl;
    std::cout&lt;&lt;"Nach deklaration -&gt; Adresse von reader : " &lt;&lt; &amp;reader &lt;&lt; std::endl;
    s.reserve(256);
    reader.read(word, 8);
    std::cout&lt;&lt;"Nach erstem einlesen -&gt; Adresse von word : " &lt;&lt; &amp;word &lt;&lt; std::endl;
    std::cout&lt;&lt;"Nach erstem einlesen -&gt; Adresse von s : " &lt;&lt; &amp;s &lt;&lt; std::endl;
    std::cout&lt;&lt;"Nach erstem einlesen -&gt; Adresse von reader : " &lt;&lt; &amp;reader &lt;&lt; std::endl;
    EraseSpaces(word,s);
    std::cout&lt;&lt;"Nach eraseSpaces -&gt; Adresse von word : " &lt;&lt; &amp;word &lt;&lt; std::endl;
    std::cout&lt;&lt;"Nach eraseSpaces -&gt; Adresse von s : " &lt;&lt; &amp;s &lt;&lt; std::endl;
    std::cout&lt;&lt;"Nach eraseSpaces -&gt; Adresse von reader : " &lt;&lt; &amp;reader &lt;&lt; std::endl;
    int i =0;
    std::cout&lt;&lt;"Vor while -&gt; Adresse von word : " &lt;&lt; &amp;word &lt;&lt; std::endl;
    std::cout&lt;&lt;"Vor while -&gt; Adresse von s : " &lt;&lt; &amp;s &lt;&lt; std::endl;
    std::cout&lt;&lt;"Vor while -&gt; Adresse von reader : " &lt;&lt; &amp;reader &lt;&lt; std::endl;
    std::cout&lt;&lt;"Vor while -&gt; Adresse von i : " &lt;&lt; &amp;i &lt;&lt; std::endl;
    while(s!="ENDFILE"){
      reader.read(word,8);
      std::cout&lt;&lt;"Nach nächstem read -&gt; Adresse von word : " &lt;&lt; &amp;word &lt;&lt; std::endl;
      std::cout&lt;&lt;"Nach nächstem read -&gt; Adresse von s : " &lt;&lt; &amp;s &lt;&lt; std::endl;
      std::cout&lt;&lt;"Nach nächstem read -&gt; Adresse von reader : " &lt;&lt; &amp;reader &lt;&lt; std::endl;
      std::cout&lt;&lt;"Nach nächstem read -&gt; Adresse von i : " &lt;&lt; &amp;i &lt;&lt; std::endl;
      EraseSpaces(word,s);
      std::cout&lt;&lt;"Nach eraseSpaces -&gt; Adresse von word : " &lt;&lt; &amp;word &lt;&lt; std::endl;
      std::cout&lt;&lt;"Nach eraseSpaces -&gt; Adresse von s : " &lt;&lt; &amp;s &lt;&lt; std::endl;
      std::cout&lt;&lt;"Nach eraseSpaces -&gt; Adresse von reader : " &lt;&lt; &amp;reader &lt;&lt; std::endl;
      std::cout&lt;&lt;"Nach eraseSpaces -&gt; Adresse von i : " &lt;&lt; &amp;i &lt;&lt; std::endl;
      if(s=="HMDSPEC"){
        std::cout&lt;&lt;"In HMDSPEC -&gt; Adresse von word : " &lt;&lt; &amp;word &lt;&lt; std::endl;
        std::cout&lt;&lt;"In HMDSPEC -&gt; Adresse von s : " &lt;&lt; &amp;s &lt;&lt; std::endl;
        std::cout&lt;&lt;"In HMDSPEC -&gt; Adresse von reader : " &lt;&lt; &amp;reader &lt;&lt; std::endl;
        std::cout&lt;&lt;"In HMDSPEC -&gt; Adresse von i : " &lt;&lt; &amp;i &lt;&lt; std::endl;
        readHMDSPEC(reader);
        std::cout&lt;&lt;"Nach readHMDSPEC -&gt; Adresse von word : " &lt;&lt; &amp;word &lt;&lt; std::endl;
        std::cout&lt;&lt;"Nach readHMDSPEC -&gt; Adresse von s : " &lt;&lt; &amp;s &lt;&lt; std::endl;
        std::cout&lt;&lt;"Nach readHMDSPEC -&gt; Adresse von reader : " &lt;&lt; &amp;reader &lt;&lt; std::endl;
        std::cout&lt;&lt;"Nach readHMDSPEC -&gt; Adresse von i : " &lt;&lt; &amp;i &lt;&lt; std::endl;
      }else if (s=="TIME"){
        readTIME(word,reader);
        std::cout &lt;&lt; scheduledTime.value &lt;&lt; std::endl;
        std::cout &lt;&lt; scheduledTime.dimension &lt;&lt; std::endl;
      }/*else if (s=="DATE"){
        readDATE();
      }else if (s=="CELLDATA"){
        readCELLDATA();
      }else if (s=="CONNDATA"){
        readCONNDATA();
      }else if (s=="SRCDATA"){
        readSRCDATA();
      }else if (s=="FPCEDATA"){
        readFPCEDATA();
      }else if (s=="FPCODATA"){
        readFPCODATA();
      }*/
      std::cout&lt;&lt;"Nach if -&gt; Adresse von word : " &lt;&lt; &amp;word &lt;&lt; std::endl;
      std::cout&lt;&lt;"Nach if -&gt; Adresse von s : " &lt;&lt; &amp;s &lt;&lt; std::endl;
      std::cout&lt;&lt;"Nach if -&gt; Adresse von reader : " &lt;&lt; &amp;reader &lt;&lt; std::endl;
      std::cout&lt;&lt;"Nach if -&gt; Adresse von i : " &lt;&lt; &amp;i &lt;&lt; std::endl;
      i++;
      std::cout&lt;&lt;"Nach i++ -&gt; Adresse von word : " &lt;&lt; &amp;word &lt;&lt; std::endl;
      std::cout&lt;&lt;"Nach i++ -&gt; Adresse von s : " &lt;&lt; &amp;s &lt;&lt; std::endl;
      std::cout&lt;&lt;"Nach i++ -&gt; Adresse von reader : " &lt;&lt; &amp;reader &lt;&lt; std::endl;
      std::cout&lt;&lt;"Nach i++ -&gt; Adresse von i : " &lt;&lt; &amp;i &lt;&lt; std::endl;
    }
    reader.close();
  }
  
  int main ()
  {
      std::string filename="SPE1.0000.SUM";
  
      RcppReadSumBin(filename);
  
      exit(0);
  }
  </code></pre>
  
  <p>When i print the adresses it looks like this (for example)<br/>
  before readHDMSPEC:<br/>
  word : 0x7ffded9a42b0<br/>
  s : 0x7ffded9a42c0<br/>
  reader : 0x7ffded9a42e0<br/>
  i : 0x7ffded9a42ac<br/>
  <br/>
  after readHDMSPEC:<br/>
  word :   0x7ffcfffffdb0<br/>
  s :      0x7ffcfffffdc0<br/>
  reader : 0x7ffcfffffde0<br/>
  i :      0x7ffcfffffdac<br/><br/></p>
  
  <p>Thank you</p>