Declare vars as locally as possible
CV_IMPL CvHaarClassifierCascade*
cvLoadHaarClassifierCascade( const char* directory, CvSize orig_window_size )
{
CV_IMPL CvHaarClassifierCascade*
cvLoadHaarClassifierCascade( const char* directory, CvSize orig_window_size )
{
- const char** input_cascade = 0;
- CvHaarClassifierCascade *cascade = 0;
-
- int i, n;
- const char* slash;
- char name[_MAX_PATH];
- int size = 0;
- char* ptr = 0;
-
if( !directory )
CV_Error( CV_StsNullPtr, "Null path is passed" );
if( !directory )
CV_Error( CV_StsNullPtr, "Null path is passed" );
- n = (int)strlen(directory)-1;
- slash = directory[n] == '\\' || directory[n] == '/' ? "" : "/";
+ char name[_MAX_PATH];
+
+ int n = (int)strlen(directory)-1;
+ const char* slash = directory[n] == '\\' || directory[n] == '/' ? "" : "/";
+ int size = 0;
/* try to read the classifier from directory */
for( n = 0; ; n++ )
/* try to read the classifier from directory */
for( n = 0; ; n++ )
CV_Error( CV_StsBadArg, "Invalid path" );
size += (n+1)*sizeof(char*);
CV_Error( CV_StsBadArg, "Invalid path" );
size += (n+1)*sizeof(char*);
- input_cascade = (const char**)cvAlloc( size );
- ptr = (char*)(input_cascade + n + 1);
-
- for( i = 0; i < n; i++ )
+ const char** input_cascade = (const char**)cvAlloc( size );
+
+ if( !input_cascade )
+ CV_Error( CV_StsNoMem, "Could not allocate memory for input_cascade" );
+
+ char* ptr = (char*)(input_cascade + n + 1);
+
+ for( int i = 0; i < n; i++ )
{
sprintf( name, "%s/%d/AdaBoostCARTHaarClassifier.txt", directory, i );
FILE* f = fopen( name, "rb" );
{
sprintf( name, "%s/%d/AdaBoostCARTHaarClassifier.txt", directory, i );
FILE* f = fopen( name, "rb" );
- cascade = icvLoadCascadeCART( input_cascade, n, orig_window_size );
+
+ CvHaarClassifierCascade* cascade = icvLoadCascadeCART( input_cascade, n, orig_window_size );
if( input_cascade )
cvFree( &input_cascade );
if( input_cascade )
cvFree( &input_cascade );