C++ 以下程序正在抛出与错误相关的内存访问
/这个程序使用的是模板类。我不知道为什么,但是这个程序在运行时抛出了一个与内存访问冲突相关的错误。在下面的评论中,我将解释导致此错误的行/C++ 以下程序正在抛出与错误相关的内存访问,c++,templates,generics,C++,Templates,Generics,/这个程序使用的是模板类。我不知道为什么,但是这个程序在运行时抛出了一个与内存访问冲突相关的错误。在下面的评论中,我将解释导致此错误的行/ #包括 使用名称空间std; 常数int size=3; 模板 类向量 { T*v; 公众: 向量() { v=新T[尺寸]; 对于(int i=0;i v[i]=0; } 向量(T*a) { 对于(int i=0;i v[i]=a[i]; } T运算符*(向量和y) { T和=0; 对于(int i=0;i 总和+=此->v[i]*y.v[i]; 回报金额
#包括
使用名称空间std;
常数int size=3;
模板
类向量
{
T*v;
公众:
向量()
{
v=新T[尺寸];
对于(int i=0;i
v[i]=0;
}
向量(T*a)
{
对于(int i=0;i
v[i]=a[i];
}
T运算符*(向量和y)
{
T和=0;
对于(int i=0;i
总和+=此->v[i]*y.v[i];
回报金额;
}
作废显示(作废)
{
对于(int i=0;i
{
cout2个问题:
您没有初始化向量的内存
您正在错误地调用构造函数
修正#1
向量(T*a)
{
v=新T[尺寸];
对于(int i=0;i
v[i]=a[i];
}
修复#2
intx[3]={1,2,3};
int y[3]={4,5,6};
向量v1(x);
向量v2(y);
我猜没有为向量定义运算符=(int[])
所以换句话说,当涉及到类型int[]=vector
时,编译器不知道您所说的v1=x
是什么意思
您没有在那里调用重载构造函数。因此您需要调用它vector v1(y);
或实现vector::operator=(const T[]v)
我希望我的类型是正确的问题似乎出在这个构造函数中
vector(T* a)
{
for(int i=0;i<size;i++)>
v[i]=a[i];
}
vector(T* a)
{
v = new T[size];//this line is new
for(int i=0;i<size;i++)
v[i]=a[i];
}
向量(T*a)
{
对于(int i=0;i
v[i]=a[i];
}
您没有为v指向的数组分配内存。构造函数向量(T*a)
将被调用,并且成员v
未初始化任何内容。这会导致未定义的行为。因此,要解决此问题,您需要在该构造函数中分配内存
vector(T* a)
{
for(int i=0;i<size;i++)>
v[i]=a[i];
}
vector(T* a)
{
v = new T[size];//this line is new
for(int i=0;i<size;i++)
v[i]=a[i];
}
向量(T*a)
{
v=新的T[size];//这行是新的
对于(int i=0;i调用相关行时,程序正在使用默认赋值运算符,该运算符正在执行导致您违反的操作。您需要自己实现此操作,例如,这对我有效:
T& operator=(T const * a)
{
for(int i=0;i<size;i++)
v[i]=a[i];
return *this;
}
T&运算符=(T常量*a)
{
对于(inti=0;iHe没有使用std::vector,它是他自己的vector类。
T& operator=(T const * a)
{
for(int i=0;i<size;i++)
v[i]=a[i];
return *this;
}