c++定义了一个动态数组但是报错???

总是提示访问路径出现冲突 研究了半天才知道是 数组的问题 请看到的大神
帮帮忙 谢谢
(vs平台上的)
图片说明

代码在下面
这是头文件部分

#include<iostream>
using namespace std;
class Array
{
private://私有数据成员:
    int *a;// 指向根据len动态申请的数组空间
    int len;// 有效数组元素的个数
public://公有成员函数 :
    Array(int b[], int length);// 构造函数, 使用数组b初始化a所指的动态数组, length初始化len
    Array(const Array &arr);// 拷贝构造函数,使用对象arr初始化新对象
    void sort();// 按题意对动态数组中的元素进行排序
    void print();// 输出a所指向的数组
    ~Array();// 析构函数, 释放动态数组空间
};

这是成员函数部分

#include"array.h"
using namespace std;

Array::Array(int b[], int length)// 构造函数, 使用数组b初始化a所指的动态数组, length初始化len
{
    int i;
    int *a = new int[length];
    len = length;
    for (i = 0; i<len; i++)
    {
        a[i]= b[i];
    }
}
Array::Array(const Array &arr)// 拷贝构造函数,使用对象arr初始化新对象
{
    int i;
    len = arr.len;
    int *a=new int[len];
    for (i = 0; i < len; i++)
    {
        a[i] = arr.a[i];
    }
}

void Array::sort()// 按题意对动态数组中的元素进行排序
{
    int i,j;
    int temp;
    for(i=0;i<len;i++)
    {
        for(j=i+1;j<len;j++)
       {
        if(a[i]<a[j])
            {
            temp = a[i];
            a[i] = a[j];
            a[j] = temp;
            }
        }
    }
}
void Array::print()// 输出a所指向的数组
{
    int i;
    for(i=0;i<len;i++)
    {
        cout<<a[i]<<endl;
    }
}
Array::~Array()// 析构函数, 释放动态数组空间
{
    delete []a;
}

这是主函数

#include"array.h"
using namespace std;

int main()
{
    int num;
    int i;
    int a[50];
    cout<<"输入数组的元素个数"<<endl;
    cin>>num;
    for(i=0;i<num;i++)
    {
        cin>>a[i];
    }
    Array text(a,num);
    text.sort();
    text.print ();
    system("pause");
    return 0;
}

for(i=0;i<len;i++)
{
for(j=i+1;j<len;j++)
{
if(a[i]<a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
里面i=len-1时,j=i+1=len;
但长度为len的数组下标范围为0~len-1;
所以数组下标越界;内存出错,所以出错中断