当我尝试push_back任何元素时,它给出了错误" Project.exe中的0.x00D644AB处的未处理异常:0xC000005:访问冲突写入位置0xCCCCCCC。"我曾尝试寻找解决方案,但似乎找不到与我有关的解决方案。谢谢吨。
SDAL(){
T* list = new T(50);
size1=50;
numberOfElements=0;
}
void push_back( const T& element ) {
numberOfElements++;
if(numberOfElements>=size1-1){
expandArray();
}
list[numberOfElements-1]=element;
}
错误指向" list [numberOfElements-1] = element;"当我调试它时。
完整的代码在这里:
template <typename T>
class SDAL {
private:
int size1;
int numberOfElements;
T* list;
public:
SDAL(){
T* list = new T[50];
size1=50;
numberOfElements=0;
}
SDAL(int x){
T* list = new T[x];
size1=x;
numberOfElements=0;
}
void expandArray(){
int tmpSize = size1;
size1=(int)((double)size1*1.5);
T* tmp = new T[size1];
for(int x=0; x<tmpSize; x++){
tmp[x]=list[x];
}
list=tmp;
}
void push_back( const T& element ) {
numberOfElements++;
if(numberOfElements>=size1-1){
expandArray();
}
list[numberOfElements-1]=element;
}
答案 0 :(得分:3)
Visual C ++在调试模式下使用0xcccccccc填充未初始化的内存,因为它更容易被捕获。因此,对0xcccccccc的访问进行捕获应该是非常有用的提示。
您的错误很简单:
您正在ctor中分配内存以存储容器元素,但是:
使用它因此仍然未初始化的指针将自然陷入您的第一次访问。
答案 1 :(得分:1)
要分配数组,请确保使用方括号:
T* list = new T[50];
^ ^
您当前的代码会分配一个T
(并将其初始化为50)。