Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 访问冲突写入位置0xCCCCC?_C++_Visual Studio 2012 - Fatal编程技术网

C++ 访问冲突写入位置0xCCCCC?

C++ 访问冲突写入位置0xCCCCC?,c++,visual-studio-2012,C++,Visual Studio 2012,当我尝试推回任何元素时,它会给出错误“Project.exe中0.x00D644AB处的未处理异常:0xC000005:访问冲突写入位置0xCCCCC”。我尝试寻找解决方案,但似乎找不到与我相关的解决方案。谢谢你 SDAL(){ T* list = new T(50); size1=50; numberOfElements=0; } void push_back( const T& element ) {

当我尝试推回任何元素时,它会给出错误“Project.exe中0.x00D644AB处的未处理异常:0xC000005:访问冲突写入位置0xCCCCC”。我尝试寻找解决方案,但似乎找不到与我相关的解决方案。谢谢你

    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;
    }
模板
类SDAL{
私人:
国际尺寸1;
整数元;
T*列表;
公众:
SDAL(){
T*list=新的T[50];
尺寸1=50;
numberOfElements=0;
}
SDAL(int x){
T*list=新的T[x];
尺寸1=x;
numberOfElements=0;
}
void expandArray(){
int-tmpSize=size1;
尺寸1=(整数)((双)尺寸1*1.5);
T*tmp=新的T[size1];
对于(int x=0;x=size1-1){
expandArray();
}
列表[numberOfElements-1]=元素;
}

要分配数组,请确保使用方括号:

    T* list = new T[50];
                   ^  ^

您当前的代码分配一个单独的<代码> t>代码>(初始化为50)。

VisualC++在调试模式下用0xccccccc填充未初始化的内存,因为这更容易被捕获。因此,对0xccccccCC的访问应该是一个非常有用的提示。 您的错误很简单:

您正在ctor中分配内存以存储容器元素,但是:

  • 您只为一个元素分配足够的资源
  • 您可以将其指定给临时成员,而不是成员

使用仍然未初始化的指针自然会在第一次访问时陷入陷阱。

这是
std::vector
的一个完美用例。当访问冲突异常发生时,您可以调试并查看导致异常的指令。您能调试程序吗?为什么决定省略大部分代码?您可能很容易就遇到了e显示了一个完整的程序。为什么
size1-1
?您在什么时候为
list
分配内存作为数组?您知道,泄漏存储在ctor容器中的元素的内存是没有用的。谢谢,我试过了,但我仍然得到了相同的结果error@user3272701:猜一猜,在其他部分中查找相同的错误用户3272701请不要要求我们调试您的代码,我们看不到的代码。我们可以回答您提出的问题。如果您提出了不好的问题,那是您的问题。这就是问题中代码的问题。如果您的代码中有错误,请调试它。请在您提出问题时尝试倾听答案。这有什么意义问然后忽略答案。你犯了很多次同样的错误。仅仅纠正一个错误是不够的。如果你一次又一次地犯错误,你每次都必须纠正它。为什么你不阅读你自己的代码。还有这个答案。我正在阅读你们给出的所有建议,但问题仍然存在,如果看起来是这样的话,对不起好像我没有尝试,但我已经做了几个小时了。为了详细说明临时部分的赋值:在构造函数中执行
T*list=new T[50];
是声明一个名为
list
的局部变量,它隐藏了同名的成员变量。相反,它应该是
list=new T[50];
以便使用成员。