C++生成成功 老是说指针异常

求助C++生成成功 老是说指针错误
//men.h
#include "stdafx.h"
#ifndef MEM_H
#define MEM_H
typedef unsigned char byte;
class Mem
{
byte* mem;
int size;
void ensureMinSize(int minsize);
public:
Mem();
Mem(int sz);
~Mem();
int msize();
byte* pointer();
byte* pointer(int minsize);
};
#endif

//men.cpp
#include "stdafx.h"
#include"Mem.h"
#include<cstring>
using namespace std;
Mem::Mem()
{
mem=0;
size=0;
}
Mem::Mem(int sz)
{
mem=0;
size=0;
ensureMinSize(sz);
}
Mem::~Mem(){
delete[]mem;
}
int Mem::msize()
{
return size;
}
void Mem::ensureMinSize(int minSize)
{
if(size<minSize)
{
byte* newmem= new byte[minSize];
memset(newmem+size,0,minSize-size);
memcpy(newmem,mem,size);
delete []mem;
size=minSize;
}
}

byte* Mem::pointer()
{
return mem;
}
byte* Mem::pointer(int minSize)
{
ensureMinSize(minSize);
return mem;
}


//testmen.cpp
#include "stdafx.h"
#include"Mem.h"
#include<cstring>
#include<iostream>
using namespace std;
class Mystring
{
Mem* buf;
public:
Mystring();
Mystring(char* str);
~Mystring();
void concat(char* str);
void print(ostream& os);
};
Mystring::Mystring()
{
buf=0;
}

Mystring::Mystring(char* str)
{
if(!*str)
{
buf=0;
return;
}
buf=new Mem(strlen(str)+1);

strcpy((char*)buf->pointer(),str);

}
void Mystring::concat(char*str)
{
if(!buf) buf=new Mem;
strcat((char*)buf->pointer(buf->msize()+strlen(str)+1),str);
}
void Mystring::print(ostream&os)
{
if(!buf) return;
os<<buf->pointer()<<endl;
}
Mystring::~Mystring()
{
delete buf;
}
int main()
{
Mystring s("My test string");
s.print(cout);
s.concat("some additional stuff");
s.print(cout);
Mystring s2;
s2.concat("using default constructor");
s2.print(cout);
}

------解决方案--------------------
鉴于楼主的问题无人问津,我想说明几点:
1.****有插入各种代码的功能,你这样直接复制粘贴代码排版很糟糕,谁想去看啊。
2.楼主得严重注意编码规范问题!!!!!!!!数据成员,成员函数。。。
3.代码注释要清楚,否则别人都不知道你的函数究竟要干嘛。
4.鉴于以上问题,我只看了部分代码

void Mem::ensureMinSize(int minSize)
{
if(size<minSize)
{
byte* newmem= new byte[minSize];
memset(newmem+size,0,minSize-size);
//???为什么要这么初始化?memset(newmem,0,minSize);不就行了
memcpy(newmem,mem,size);//这里最好还是判断一下你的mem是不是为空
delete []mem;//我想问的是为什么删除过后不让mem = newmem;?
size=minSize;
}
}

这个函数是个大问题!!!