Re: auto_ptr array
George wrote:
Thanks Ben,
puts(), for example, needs a native array.
std::vector<char> myCharacterVector;
....
puts(&myCharacterVector[0]); // works
This won't work with your array of auto_ptrs.
auto_ptr<char> myAutoptrs[20];
....
puts(myAutoptrs[0].get()); // fails
Fail I think you mean runtime error other than compile error. I have
written some code to verify.
How do you think why the heap is corrupted?
I didn't say the heap would be corrupted. I said it would fail. That is,
it would not do what was intended.
[Code]
#include <stdio.h>
#include <memory>
using namespace std;
int main( void )
{
auto_ptr<char> myAutoptrs [2];
char* p1 = new char;
char* p2 = new char;
memcpy (p1, "a", 3);
This line will corrupt the heap because you try to write three bytes into a
buffer which is only one byte.
memcpy (p2, "b", 3);
And again.
myAutoptrs [0].reset (p1);
myAutoptrs [1].reset (p2);
Every string needs to end in a NUL character, make sure to include the
terminator.
puts (myAutoptrs[0].get()); // output a followed by heap corruption
information
Fix the above items and then we can talk about why this line won't work.
return 0;
}
[/Code]
regards,
George