尝试为阵列释放内存时发生错误

时间:2014-11-15 19:40:50

标签: pointers memory dynamic heap

在使用compile online和xcode进行c ++编码时,尝试删除为数组分配的内存时遇到了一些问题。代码段如下所示。删除功能不能很好....希望有人可以帮助我!

#include <iostream>
using namespace std;
int main()
{
   int *p;
   p = new int[20];
   for(int i=0;(p+i)<(p+20*sizeof(int));i++)
   {
       p[i]=i;
   }

   for(int i=0;i<20;i++)
   {
       cout<<"p["<<i<<"]:"<<p[i]<<endl;
   }
   delete[] p;
   return 0; 
}

在线编译输出: 编译源代码.... $ g ++ main.cpp -o demo -lm -pthread -lgmpxx -lgmp -lreadline 2&gt;&amp; 1

执行程序.... $演示 p [0]:0 p [1]:1 p [2]:2 p [3]:3 p [4]:4 p [5]:5 p [6]:6 p [7]:7 p [ 8]:8 p [9]:9 p [10]:10 p [11]:11 p [12]:12 p [13]:13 p [14]:14 p [15]:15 p [16] :16 p [17]:17 p [18]:18 p [19]:19 * glibc检测到* demo:free():无效下一个大小(快):0x0000000001b69010 * ======= Backtrace:== ======= /lib64/libc.so.6[0x3170875e76] /lib64/libc.so.6[0x31708789b3] demo [0x400bff] /lib64/libc.so.6(__libc_start_main+0xfd)[0x317081ed5d] demo [0x4009e9] =======记忆地图:======== 00400000-00401000 r-xp 00000000 07:00 2195935 / web / com / 141607803728670 / demo 00601000-00602000 rw-p 00001000 07:00 2195935 / web / com / 141607803728670 / demo 01b69000-01b8a000 rw-p 00000000 00:00 0 [heap] 3170000000-3170020000 r-xp 00000000 fd:00 8257538 /lib64/ld-2.12.so 317021f000-3170220000 r - p 0001f000 fd:00 8257538 /lib64/ld-2.12.so 3170220000-3170221000 rw-p 00020000 fd:00 8257538 /lib64/ld-2.12.so 3170221000-3170222000 rw-p 00000000 00:00 0 3170400000-3170456000 r-xp 00000000 fd :00 14027864 /usr/lib64/libgmp.so.3.5.0 3170456000-3170656000 --- p 000 56000 fd:00 14027864 /usr/lib64/libgmp.so.3.5.0 3170656000-317065b000 rw-p 00056000 fd:00 14027864 /usr/lib64/libgmp.so.3.5.0 3170800000-317098a000 r-xp 00000000 fd:00 8257542 /lib64/libc-2.12.so 317098a000-3170b8a000 --- p 0018a000 fd:00 8257542 /lib64/libc-2.12.so 3170b8a000-3170b8e000 r - p 0018a000 fd:00 8257542 /lib64/libc-2.12.so 3170b8e000 -3170b8f000 rw-p 0018e000 fd:00 8257542 /lib64/libc-2.12.so 3170b8f000-3170b94000 rw-p 00000000 00:00 0

1 个答案:

答案 0 :(得分:0)

感谢Scott Hunter的帮助,以下片段现在正在运作。

#include <iostream>
using namespace std;
int main()
{
   int *p;
   p = new int[20];
   //for(int i=0;(p+i)<(p+20*sizeof(int));i++)
   for(int i=0;i<20;i++)
   {
       p[i]=i;
   }

   for(int i=0;i<20;i++)
   {
       cout<<"p["<<i<<"]:"<<p[i]<<endl;
   }
   delete[] p;
   return 0; 
}