⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 checkmem

📁 一个很好的分子动力学程序
💻
字号:
#!/usr/bin/perlif ($#ARGV<0)	{	print "CheckMem <xmo_file>\n";   print "Analyzes output from XMD with CHECK MEM ON option selected\n";   print "and looks for memory leaks.\n";	exit 1;	}$InputFileName = $ARGV[0];$ResultOK = open (INPUT, "<" . $InputFileName);if (!$ResultOK)	{	print "ERROR:  Could not open input file $InputFileName\n";	exit 1;	}$VarCount=0;$NumCheck=0;$NumError=0;$LineCount = 0;while ($line=<INPUT>)	{	chop $line;	$LineCount++;	@Token = split (/[ \t]+/, $line);	if ($Token[0] eq "CHECK" && $Token[1] eq "MEM")		{		$NumCheck++;		$VarName = $Token[3];		$VarAddr = $Token[4];		$File    = $Token[5];		$LineNo  = $Token[6];		#  Record of ALLOCATION macro		if ($Token[2] eq "ALLO" || $Token[2] eq "ALLO(R)")			{			#  See if first occurance of variable			$VarIndex = $VarIndex{$VarAddr};			$IsFirst = ( $VarIndex==0 || $Size[$VarIndex]==0);			#  Print warning if not first allocation			if (!$IsFirst)				{				$NumError++;				print "ALLOCATE:  Variable allocated without be free-ed\n";				print "Output File Line Number $LineCount\n";				print "Original Allocation:\n";				print "   Name   = ", $VarName[$VarIndex], "\n";				print "   Addr   = ", $VarAddr,            "\n";				print "   File   = ", $File   [$VarIndex], "\n";				print "   LineNo = ", $LineNo [$VarIndex], "\n";				print "   Size   = ", $Size   [$VarIndex], "\n";				print "New Allocation:\n";				print "   Name   = ", $VarName, "\n";				print "   Addr   = ", $VarAddr,            "\n";				print "   File   = ", $File, "\n";				print "   LineNo = ", $LineNo, "\n";				print "   Size   = ", $Token[7], "\n";				print "\n";				}			#  If new allocation create entry			if ($VarIndex{$VarAddr}==0)				{				$VarCount++;				$VarIndex = $VarCount;				$VarIndex{$VarAddr} = $VarIndex;				}			#  Store this info			$VarAddr [$VarIndex] = $VarAddr;			$VarName [$VarIndex] = $VarName;			$File    [$VarIndex] = $File;			$LineNo  [$VarIndex] = $LineNo;			$Size    [$VarIndex] = $Token[7];			}		#  Record of FREE macro		elsif 			(			$Token[2] eq "FREE" || 			$Token[2] eq "FREE(R0)" || 			$Token[2] eq "FREE(R1)" 			)			{			$VarIndex = $VarIndex{$VarAddr};			$IsRealloc =				(				$Token[2] eq "FREE(R0)" || 				$Token[2] eq "FREE(R1)" 				);			#  Error with free statement if not reallocation			if (!$IsRealloc)				{				$IsError = 0;				#  Variable never allocated  				if ($VarIndex==0)					{					$IsError = 1;					print "FREE:  Freeing variable that was never allocated\n";					}				#  Variable had empty allocation				elsif ($Size[$VarIndex]==0)					{					$IsError = 1;					print "FREE:  Freeing variable with zero allocation\n";					}				if ($IsError)					{					$NumError++;					print "Output File Line Number $LineCount\n";					print "Name   = ", $VarName, "\n";					print "Addr   = ", $VarAddr, "\n";					print "File   = ", $File, "\n";					print "LineNo = ", $LineNo, "\n";					print "\n";					}				}			#  Mark size as 0			if ($VarIndex!=0)				{				$Size[$VarIndex] = 0;				}			}		#  Record of REALLOC macro		elsif ($Token[2] eq "REALLO")			{			$VarIndex = $VarIndex{$VarAddr};			#  Variable never allocated before, make new entry			if ($VarIndex==0)				{				$VarCount++;				$VarIndex = $VarCount;				$VarIndex{$VarAddr} = $VarIndex;				}			#  Store info			$VarAddr [$VarIndex] = $VarAddr;			$VarName [$VarIndex] = $VarName;			$File    [$VarIndex] = $File;			$LineNo  [$VarIndex] = $LineNo;			$Size    [$VarIndex] = $Token[7];			}		else 			{			print "ERROR:  Unknown CHECK MEM option <", $Token[2], ">\n";			}			}	}close (INPUT);#  Print unreleased memoryprint "Unreleased Memory\n\n";print "   Address     Size   Line   File          VarName\n";print "---------- -------- ------   ------------- -------\n";for ($i=0; $i<=$VarCount; $i++)	{	if ($Size[$i]>0)		{		printf 			("%10s %8d %6d   %-13s %s\n", $VarAddr[$i], $Size[$i],			$LineNo[$i],   $File[$i], $VarName[$i]);		}	}print "Number of Check Statements = ", $NumCheck, "\n";print "Number of Detected Errors  = ", $NumError, "\n";

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -