【发布时间】:2011-11-06 13:13:01
【问题描述】:
我有一个 RWLock 类,我正在尝试创建一个vector<vector<RWLock*>>,这是一个指向 RWLock 的二维向量。
我正在做的是:
vector<vector <RWLock*>> board = vector<vector <RWLock*>>(height);
RWLock* lock;
for(int i = 0 ; i < height ; ++i)
{
board[i] = vector <RWLock*>(width, NULL);
for(int j = 0 ; j < width ; ++j)
{
lock = (RWLock*) malloc(sizeof(RWLock*));
*lock = RWLock();
board[i][j] = lock;
}
}
但是,当我运行它时,我得到了
*** glibc detected*** ./test: free(): invalid pointer: 0x[some hexa] ***
我已经对此进行了足够多的调试,知道一旦我调用“board[i] = vector (width, NULL);”就会弹出它第二次,i 等于 1。我就是不知道是什么问题。
提前致谢。
编辑:我不得不手动复制代码,而内部循环(因为我在没有互联网连接的虚拟机中编写实际代码)是错误的。此处的代码现在与实际代码匹配。
【问题讨论】:
-
为什么不
board[i][j] = new RWLock();? -
您是否在其他地方定义了
j?你的内部循环应该使用j而不是i。 -
第二个循环也应该超过宽度,而不是高度。 j 到底在哪里声明?