- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个类调用网格。该类包含两个用于存储网格的二维字符数组...该类有两个函数,分别为网格创建内存和释放网格内存。
网格.h
private:
char **gridOne;
char **gridTwo;
网格.cpp
void Grid::allocateGridMem()
{
_gridOne = new char*[gridRowCount()];
_gridTwo = new char*[gridRowCount()];
for(int i =0; i < gridColumnCount(); ++i){
*(_gridOne + i) = new char[gridColumnCount()];
*(_gridTwo + i) = new char[gridColumnCount()];
}
}
void Grid::dealocateGridMem()
{
if(_gridOne != 0)
{
for(int i =0; i < gridRowCount(); ++i){
delete [] *(_gridOne + i);
}
delete [] _gridOne;
_gridOne = 0;
}
if(_gridTwo != 0)
{
for(int i =0; i < gridRowCount(); i++){
delete [] *(_gridTwo + i);
}
delete [] _gridTwo;
_gridTwo = 0;
}
}
问题发生在我收到以下错误的内存释放中。
*** glibc detected *** ./a.out: double free or corruption (out): 0x088c9318 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(+0x6b591)[0xb756c591]
/lib/tls/i686/cmov/libc.so.6(+0x6cde8)[0xb756dde8]
/lib/tls/i686/cmov/libc.so.6(cfree+0x6d)[0xb7570ecd]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0xb775c741]
/usr/lib/libstdc++.so.6(_ZdaPv+0x1d)[0xb775c79d]
./a.out[0x804a7b9]
./a.out[0x8049cb6]
./a.out[0x804b8f3]
./a.out[0x804c06a]
./a.out[0x804b71d]
./a.out[0x80498eb]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0xb7517bd6]
./a.out[0x8049521]
======= Memory map: ========
08048000-0804f000 r-xp 00000000 08:02 920728 /home/a.out
0804f000-08050000 r--p 00006000 08:02 920728 /home/a.out
08050000-08051000 rw-p 00007000 08:02 920728 /home/a.out
088c7000-088e8000 rw-p 00000000 00:00 0 [heap]
b7300000-b7321000 rw-p 00000000 00:00 0
b7321000-b7400000 ---p 00000000 00:00 0
b7500000-b7501000 rw-p 00000000 00:00 0
b7501000-b7654000 r-xp 00000000 08:02 19796293 /lib/tls/i686/cmov/libc-2.11.1.so
b7654000-b7655000 ---p 00153000 08:02 19796293 /lib/tls/i686/cmov/libc-2.11.1.so
b7655000-b7657000 r--p 00153000 08:02 19796293 /lib/tls/i686/cmov/libc-2.11.1.so
b7657000-b7658000 rw-p 00155000 08:02 19796293 /lib/tls/i686/cmov/libc-2.11.1.so
b7658000-b765b000 rw-p 00000000 00:00 0
b765b000-b7678000 r-xp 00000000 08:02 19791955 /lib/libgcc_s.so.1
b7678000-b7679000 r--p 0001c000 08:02 19791955 /lib/libgcc_s.so.1
b7679000-b767a000 rw-p 0001d000 08:02 19791955 /lib/libgcc_s.so.1
b767a000-b767b000 rw-p 00000000 00:00 0
b767b000-b769f000 r-xp 00000000 08:02 19796301 /lib/tls/i686/cmov/libm-2.11.1.so
b769f000-b76a0000 r--p 00023000 08:02 19796301 /lib/tls/i686/cmov/libm-2.11.1.so
b76a0000-b76a1000 rw-p 00024000 08:02 19796301 /lib/tls/i686/cmov/libm-2.11.1.so
b76a1000-b778a000 r-xp 00000000 08:02 28708531 /usr/lib/libstdc++.so.6.0.13
b778a000-b778b000 ---p 000e9000 08:02 28708531 /usr/lib/libstdc++.so.6.0.13
b778b000-b778f000 r--p 000e9000 08:02 28708531 /usr/lib/libstdc++.so.6.0.13
b778f000-b7790000 rw-p 000ed000 08:02 28708531 /usr/lib/libstdc++.so.6.0.13
b7790000-b7797000 rw-p 00000000 00:00 0
b77a5000-b77a8000 rw-p 00000000 00:00 0
b77a8000-b77a9000 r-xp 00000000 00:00 0 [vdso]
b77a9000-b77c4000 r-xp 00000000 08:02 19791897 /lib/ld-2.11.1.so
b77c4000-b77c5000 r--p 0001a000 08:02 19791897 /lib/ld-2.11.1.so
b77c5000-b77c6000 rw-p 0001b000 08:02 19791897 /lib/ld-2.11.1.so
bf83a000
-bf84f000 rw-p 00000000 00:00 0 [stack]
Aborted
我已经检查了我所有的指示,它们在执行过程中没有被更改为其他东西,而且人们能想到的每一种检查和平衡都在发生。在过去的几个小时里,我一直在拔头发,但仍然一无所获。
我在 ubuntu 10 系统上用 gcc 运行它。
还应该注意,为了这篇文章的目的,我已经更改了名称等,并且只包含了我认为有值(value)的代码。
编辑:
修复了语法问题,但是原代码有这个我只是快速打出来,没有校对。
非常感谢任何帮助,并且在我的书中值得一枚金星。我是 gdb 的高级用户,并且在这个问题上使用了它,但我认为这可能是外部库中的问题。我看不出内存有任何问题,也看不到它的范围,只是希望有人看到过这样的事情。对于所有目的,这段代码都很好。
最佳答案
改变
for(int i =0; i < gridColumnCount(); ++i){
_gridOne = new char[gridColumnCount()];
_gridTwo = new char[gridColumnCount()];
}
到
for(int i =0; i < gridRowCount(); ++i){
_gridOne[i] = new char[gridColumnCount()];
_gridTwo[i] = new char[gridColumnCount()];
}
别这样
*(array + i)
但是
array[i]
关于c++ - 双免腐败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3307647/
一个特定文档不会更新,而同一查询会更新我查询的任何其他 _id: Category.findOneAndUpdate( {_id : req.params.id}, {parent :
我正在使用 ifstream 读取文件头。编辑:我被要求放置完整的最小程序,所以就在这里。 #include #include using namespace std; #pragma pack(
typedef struct { int *info; } row; struct { row* head; int len; int size; } list; in
在索引 block 时我在 debug.log 中有错误: 2016-11-14 15:14:52 UpdateTip: new best=000000000000038ad111e773453f17
我是一名优秀的程序员,十分优秀!