C ++リストピット

コールpop_frontは、国境を越えた問題にアクセスするために、空のstd ::リストです

std ::リストは空のコールでpop_backのアクセスクロスボーダーの問題

だから、使用、pop_frontを  pop_backは、最初のリストが空であるかどうかを判断しなければなりません

std ::リストが空のときにクラッシュを引き起こすpop_front呼び出します


リストは、ポインタがロードされている場合は、それが空の場合、その後、その後、範囲外の直接の原因メモリによって返されたポインタを使用し、非NULL値を返すことがpop_frontを呼び出します。
書式#include <stdio.hに>
する#include <stdlib.h>に含ま
する#include <iostreamの>
の#include <リスト>
書式#include <unistd.h>
の#include <assert.h>

名前空間stdを使用。

テストは()//失敗無効
{
のstd ::リスト<int型*>リスト。
INT、N = 1;
std :: coutの<< "n個のアドレス:" << static_castを<void *型>(&N)<<はstd ::てendl;

(1)一方
{
list.push_back(&N)。
std :: coutの<< "サイズ:" <<はlist.size()<< "フロント:" << static_castを<void *型>(list.front())<<はstd ::てendl;
list.pop_front();
std :: coutの<< "サイズ:" <<はlist.size()<< "フロント:" << static_castを<void *型>(list.front())<<はstd ::てendl;

(list.empty())のIF
アサート(list.front()== NULL); //ここでは主張しますが失敗し、それが空であるかどうかを確認してください前pop_front内のポインタのためのリストは、それ以外の場合は、クロスボーダーのアクセスにつながる場合
usleep(* 500 1000);
}
}

無効にTest2()//パス
{
のstd ::リスト<整数>リスト2。
INT、N = 1;

(1)一方
{
list2.push_back(N)
std :: coutの<< "サイズ:" << list2.size()<< "フロント:" << list2.front()<<はstd ::てendl;
list2.pop_front();
std :: coutの<< "サイズ:" << list2.size()<< "フロント:" << list2.front()<<はstd ::てendl;

IF(list2.empty())
アサート(list2.front()== 0); //この主張の成功
はusleep(* 500 1000);
}
}

INT
メイン(int型ARGC、チャー** ARGV)
{
Test2を()。
テスト();

0を返します。
}

転送します。https://blog.csdn.net/zmlovelx/article/details/90476306

おすすめ

転載: www.cnblogs.com/Malphite/p/11566959.html