我正在尝试删除指向动态分配的整数指针的指针,但是当我关闭程序时出现意外错误。
首先,在头文件中声明
class Client < ActiveRecord::Base
#has_many :contracts
#validates_cpf_or_cnpj :cpf_or_cnpj
#validates_uniqueness_of :cpf_or_cnpj, message: "exists."
#validates_uniqueness_of :rg, message: "exists."
以下分配......
class TileMapManager
{
public:
//Some public constructor, destructor and some functions...
private:
// Other private data...
int m_xSize;
int m_ySize;
int **m_mapSlots;
};
和释放功能。我在析构函数中调用它。
m_mapSlots = new int*[m_ySize];
for (int i = 0; i < m_xSize; ++i)
m_mapSlots[i] = new int[m_xSize];
我的程序已触发该行的断点。
我认为删除的方式没问题,但我不知道为什么会导致问题。 帮帮我。
答案 0 :(得分:2)
当然可以
for (int i = 0; i < m_xSize; ++i)
不应该
for (int i = 0; i < m_ySize; ++i)
如果因{/ p>而发生m_xSize > m_ySize
未定义的行为
m_mapSlots
仅指向m_ySize
指针delete
将尝试释放未分配的内存答案 1 :(得分:1)
永远不要试图以这种方式模拟二维阵列。相反,定义一个整数的向量:
std::vector<int> m_mapSlots;
...
m_mapSlots.resize(m_ySize * m_xSize);
int v = m_MapSlots[x + y * x];
答案 2 :(得分:0)
您在分配中使用了错误的变量:
m_mapSlots = new int*[m_ySize]; // allocates m_ySize elements
for (int i = 0; i < m_xSize; ++i) // goes through m_xSize elements
m_mapSlots[i] = new int[m_xSize];
循环条件中的m_xSize
应为m_ySize
。
或者,你知道,使用大小为std::vector<int>
的{{1}}并避免整个混乱。