程序异常判断时,有问题,往往会使用return; ,虽然后面的程序执行过程被跳过了,但是后面的资源释放的语句也被跳过了。
在资源释放的语句之前加个名称(比如MyLocation: ),goto MyLocation; 语句直接跳过后面的语句,直接跳转到MyLocation位置,执行资源释放的语句。
执行效果类似于return; 语句,但是return; 语句直接返回,后面的资源释放的语句将不会被执行。
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
using namespace std;
void func(char* strName)
{
FILE* fd=fopen(strName,"rb");
if (fd)
{
cout << "文件存在!" << endl;
return;
}
for (int i=0;i<100; i++)
{
if ((i+1)%10==0)
{
cout << "i=" << i << endl;
}
}
fclose(fd);
}
int main()
{
//cout << "abc.txt" << endl;
func("abc.txt");
system("pause");
return TRUE;
}
使用goto语句后
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
using namespace std;
void func(char* strName)
{
FILE* fd=fopen(strName,"rb");
if (fd)
{
cout << "文件存在!" << endl;
goto MyLocation;//return;
}
for (int i=0;i<100; i++)
{
if ((i+1)%10==0)
{
cout << "i=" << i << endl;
}
}
MyLocation:
fclose(fd);//释放资源
}
int main()
{
//cout << "abc.txt" << endl;
func("abc.txt");
system("pause");
return TRUE;
}