我有一个这样的程序
list:: iterator n = alist.begin(); while(n!= (list ::iterator)0) { printf("Element is %d\n",*n); n = alist.erase(n); }
所以我在这里将迭代器与零进行比较.但删除最后一个元素后,编译器显示此错误.
*** glibc detected *** ./new: free(): invalid pointer: 0xbf99cb10 *** ======= Backtrace: ========= /lib/libc.so.6[0xb7d956e1] /lib/libc.so.6(cfree+0x89)[0xb7d96d79] /usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0xb7f3ff81] ./new[0x8048c81] ./new[0x8048ca6] ./new[0x8048d07] ./new[0x8048d39] ./new(__gxx_personality_v0+0x216)[0x804888e] /lib/libc.so.6(__libc_start_main+0xdc)[0xb7d46f9c] ./new(__gxx_personality_v0+0x49)[0x80486c1] ======= Memory map: ======== 08048000-0804a000 r-xp 00000000 08:09 3704751 /home/sathya/chaithra/archivesthrash/new
如果队列/列表为空,我希望迭代器为零..我该怎么办?因为在我的项目中我需要将此迭代器与零进行比较,而不是与alist.end()进行比较.这可能是什么解决方案?
为什么你认为迭代器会"零"?迭代器不是指针或索引.如果需要检查容器是否为空,请使用empty()成员函数.