以下程序正在引发与错误相关的内存访问
Following program is throwing an error related memory access
/此程序使用模板类。我不知道为什么,但这个程序在运行时相关的内存访问违规时抛出了一个错误。在下面的评论中,我将解释是哪一行导致了这个错误/
#include<iostream>
using namespace std;
const int size =3;
template <class t="">
class vector
{
T* v;
public:
vector()
{
v=new T[size];
for(int i=0;i<size;i++)>
v[i]=0;
}
vector(T* a)
{
for(int i=0;i<size;i++)>
v[i]=a[i];
}
T operator*(vector &y)
{
T sum=0;
for(int i=0;i<size;i++)>
sum+=this->v[i] * y.v[i];
return sum;
}
void display(void)
{
for(int i=0;i<size;i++)>
{
cout<<v[i]<<"t";
}
cout<<"n";
}
};
int main()
{
int x[3]={1,2,3};
int y[3]={4,5,6};
vector<int> v1;
vector <int> v2;
v1=x; // This is causing an error
v2=y; // This is causing an error
//int R=v1*v2;
//cout<<"R = "<<R<<"n";
cout<<"V1 = ";
v1.display();
cout<<"V2 = ";
v2.display();
cout<<"V1 x V2 = "<<v1*v2;
return 0;
}
问题似乎出在这个构造函数中
vector(T* a)
{
for(int i=0;i<size;i++)>
v[i]=a[i];
}
您没有为v.所指向的数组分配内存
2问题:
- 您没有初始化向量的内存
- 你不正确地调用构造函数
修复#1
vector(T* a)
{
v=new T[size];
for(int i=0;i<size;i++)>
v[i]=a[i];
}
修复#2
int x[3]={1,2,3};
int y[3]={4,5,6};
vector<int> v1(x);
vector <int> v2(y);
vector(T * a)
将被调用,而成员v
不会被任何东西初始化。这会导致未定义的行为。所以要解决这个问题,你需要在构造函数中进行分配
vector(T* a)
{
v = new T[size];//this line is new
for(int i=0;i<size;i++)
v[i]=a[i];
}
我的猜测是没有为vector
定义operator=(int [])
。
所以换句话说,编译器不知道当涉及到类型int[] = vector<int>
时,v1=x
是什么意思。
您没有在那里调用重载构造函数。因此,您要么需要将其称为vector<int> v1(y);
,要么实现vector::operator=(const T[] v)
;
我希望我的类型正确
当调用有问题的行时,程序使用默认的赋值运算符,该运算符正在执行导致冲突的操作。你需要自己实现这一点,例如,这对我来说很有效:
T& operator=(T const * a)
{
for(int i=0;i<size;i++)
v[i]=a[i];
return *this;
}
相关文章:
- 尝试从C++访问 UWP 的电子邮件邮件类会导致"REGDB_E_CLASSNOTREG类未注册"错误
- C++ - 循环访问指针数组会导致错误
- 执行错误访问 遍历向量
- 错误访问 读入对象后
- 如何修复 CopyFile() 错误 5 - 访问被拒绝错误
- CreateFile 在尝试打开目录进行读取时始终返回错误 5(访问被拒绝)
- 范围检查检测到的检测代码和超出范围的错误访问
- 查找() 上的 C++ 错误访问错误
- 错误访问另一个插件中的类(错误:未定义的引用)
- C STD ::排序Intel编译器错误:访问违规
- libcurl、OSX、curl_multi_执行错误访问
- C++数组错误:访问冲突读取位置0xC0000005
- C++LinkedList错误:访问冲突错误
- 使用.open()成员函数C++的ifstream数组的错误访问代码
- C++ 段错误 访问对象指针向量的 std::vector.size()
- JNI 从 C 错误访问对象数组
- 带有内存错误访问的C++结构new
- XCode C++上的错误访问错误
- 错误访问冲突写入位置0x00229C20.尝试在控制台中输入字符串时
- MySQL 连接器/C++ 错误访问崩溃