title: Creating string array with overriden new[] operator
body: <p>With my friend we made a program with overriden new and new[] operators.
  I discovered that when I try to create string array with this code:</p>
  
  <pre><code>string* Test1 = new string[10];
  </code></pre>
  
  <p>Function returns invalid pointer (Usually it's value is moved 8 bits foreward, I'm compilling program to x64 platform).
  Our new[] function looks like that:</p>
  
  <pre><code>void* operator new[] (size_t e)
  {
      void* Test2 = operator new(e); 
      return Test2;
  }
  </code></pre>
  
  <p>when running program with debugger before return, pointer <code>Test2</code> had value 0x0000000009dfaa90, but value of <code>Test1</code> became 0x0000000009dfaa98.<br>
  This situation happens only with string type. I've tried do the same with "int[10]", "string* [10]" and object of one of my classes but problem occures only when dealing with string, also, code:</p>
  
  <pre><code>string* Test1 = new string;
  </code></pre>
  
  <p>works perfectly fine. </p>
  
  <p>Could someone explain me why it's happenning and how to make it works correctly?</p>
  
  <p>PS: We are using Visual Studio 2012 Proffesional</p>
  
  <p>Edit: I just tested it non-overriden <code>new[]</code> and it's working this same way when creating string table (Returned pointer is other than the one that function try to <code>return</code>), so it seems to not be a problem. Could someone explain me why value of pointer changes only for string arrays, and how it changes if there seems to not be any other instruction that could change it?</p>