c++ 关于引发问题未加载wntdll.pdb问题

问题遇到的现象和发生背景

#include <iostream>
#include <string>

//简单演绎栈的操作原理:压栈和弹栈

template <class T>
class Stack//栈类
{
public:
    Stack(int size)
    {
        this->size = size;
        memset(array, 0, size * sizeof(array));//将数组的值标记为0
    }
    ~Stack()
    {
        delete array;
    }
    void push(T value)//压栈
    {
        array[point - 1] = value;
        point++;
    }
    void PushShow()//压栈情况展示
    {
        std::cout << "压栈" << std::endl;
        for (int i = size - 1; i >= 0; i--)
        {
            if (!array[i])//判断数组值是否标记为0
            {
                std::cout << "|" << " " << "|" << std::endl;
            }
            else
            {
                std::cout << "|" << array[i] << "|" << std::endl;
                std::cout << " - " << std::endl;
            }
        }
    }
    void pop()//弹栈
    {
        std::cout << "弹栈" << std::endl;
        for (int i = 0; i < size; i++)
        {
            if (!array[i])//判断数组值是否标记为0
            {
                std::cout << "|" << " " << "|" << std::endl;
                std::cout << " - " << std::endl;
            }
            else
            {
                std::cout << "|" << array[i] << "|" << std::endl;
                std::cout << " - " << std::endl;
            }
        }
    }
private:
    int size;
    T *array = new T[size];//栈的内存数组
    int point = 1;//栈的指针
};

int main()
{
    Stack<int>stack(10);
    stack.push(1);
    stack.PushShow();
    stack.push(2);
    stack.PushShow();
    stack.push(3);
    stack.pop();
    
    return 0;
}

结果:

img

img

你的栈有问题。构造函数里面是赋值不是初始化。初始化发生在初始化列表中,你没有给size初值,那么size是随机值,然后你拿着一个随机值去申请一段空间。

给你改好了


#include <iostream>
#include <string>
#include <cstring>

//简单演绎栈的操作原理:压栈和弹栈
template <class T>
class Stack //栈类
{
public:
    Stack(int size)
    {
        this->size = size;
        array = new T[size];
        memset(array, 0, size * sizeof(T)); //将数组的值标记为0
    }

    ~Stack()
    {
        delete [] array;
    }

    void push(T value) //压栈
    {
        array[point - 1] = value;
        point++;
    }

    void PushShow() //压栈情况展示
    {
        std::cout << "压栈" << std::endl;
        for (int i = size - 1; i >= 0; i--)
        {
            if (!array[i]) //判断数组值是否标记为0
            {
                std::cout << "|"
                          << " "
                          << "|" << std::endl;
            }
            else
            {
                std::cout << "|" << array[i] << "|" << std::endl;
                std::cout << " - " << std::endl;
            }
        }
    }

    void pop() //弹栈
    {
        std::cout << "弹栈" << std::endl;
        for (int i = 0; i < size; i++)
        {
            if (!array[i]) //判断数组值是否标记为0
            {
                std::cout << "|"
                          << " "
                          << "|" << std::endl;
                std::cout << " - " << std::endl;
            }
            else
            {
                std::cout << "|" << array[i] << "|" << std::endl;
                std::cout << " - " << std::endl;
            }
        }
    }

private:
    int size;
    T *array;
    int point = 1;          //栈的指针
};

int main()
{
    Stack<int> stack(10);
    stack.push(1);
    stack.PushShow();
    stack.push(2);
    stack.PushShow();
    stack.push(3);
    stack.pop();
    return 0;
}