メモリ消去用の実験テストプログラム

///////////////////////////////////////////////////////////
//                                                       //
//                                                       //  
//          メモリ消去用の実験テストプログラム           //
//                                                       //  
//                                                       //  
//                                                       //  
//                                       2014/06/29      //  
///////////////////////////////////////////////////////////

#include <stdio.h>
#include <stdlib.h>

enum sex {woman, man};
 
typedef struct person {
  enum sex sex;  //性別
  int age; //年齢

  struct person *prev;  /* 前の構造体を示すポインタ */
  struct person *next;  /* 次の構造体を示すポインタ */
} person;



int main ()
{
  // 10人分のデータを作る 

  int i, k, count;
  person  *p_person, *p_prev_person, *p_next_person;
  person  *p_first_person, *p_last_person, *temp_p_person;


  printf("checked 0.\n");

  ////////////  現状データの入力 ////////////
  
   p_person= (person *)malloc(sizeof(person));
  if(p_person == NULL) {
      printf("メモリが確保できません\n");
      exit(EXIT_FAILURE);
   }

  p_person->sex = woman;
  p_person->age = 10;

  p_first_person = p_person;  //最初の一人

  // (最後に)ポインタをリンクする
  p_person->prev = NULL;
  p_prev_person = p_person;

  for(i=9; i>=0; i--){
	
	p_person= (person *)malloc(sizeof(person));
	  if(p_person == NULL) {
		printf("メモリが確保できません %d\n",i);
		exit(EXIT_FAILURE);
	  }
	  
	  p_person->sex = woman;
	  p_person->age = i;
	  
	  
	  // (最後に)ポインタをリンクする
	  p_prev_person->next = p_person;
	  p_person->prev = p_prev_person;
	  p_person->next = NULL;
	  p_prev_person = p_person;
  }

	  
  p_last_person = p_person; //最後の一人

  printf("checked 1.\n");

  ////////////  現状データの入力 終わり ////////////

  ////////////  データ削除の処理例 ////////////


  p_person = p_first_person;  //最初の一人
  
  while (p_person != NULL){
	
	
	if (p_person->age == 3){
	  
	  // メモリを消す前の処理
	  if (p_person == p_first_person){ // 最初の場合
		p_first_person = p_person->next;
		p_first_person->prev = NULL;
		free(p_person);
		
		p_person = p_first_person;
		
		printf("C1:");	  
	  }
	  else if (p_person == p_last_person){ //最後の場合
		p_last_person = p_person->prev;
		p_last_person->next = NULL;
		free(p_person);
		
		p_person = p_last_person;
		
		printf("C2:");	  
	  }
	  else {
		p_person->next->prev = p_person->prev;
		p_person->prev->next = p_person->next;
		temp_p_person = p_person->prev; // 一つ前のポインタに退避
		
		free(p_person);
		
		p_person = temp_p_person;
		
		printf("C3:");	  
	  }
	}
	
	p_person = p_person->next;
	
  }

  ////////////  確認フェーズ ////////////

  if (p_first_person == p_last_person){
	printf("passed exit\n");
	exit(0);
  }



  p_person = p_first_person;  

  while (p_person != NULL){
	printf("%d ",p_person->age);
	p_person = p_person->next;
  }


}






#if 0
  p_person = p_first_person;  

  while (p_person != NULL){
	printf("%d ",p_person->age);
	p_person = p_person->next;
  }

  p_person = p_last_person;  

  while (p_person != NULL){
	printf("%d ",p_person->age);
	p_person = p_person->prev;
  }

#endif

未分類

Posted by ebata