Changeset 3659:d261ecc0a658 in orange


Ignore:
Timestamp:
05/15/07 18:27:59 (7 years ago)
Author:
miha <miha.stajdohar@…>
Branch:
default
Convert:
aa690d5d05dabc50fd8c7f8123c752a418fd9e54
Message:
  • close file pointers before returns
  • fixed memory leaks in setData
Location:
source/orangeom
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • source/orangeom/networkoptimization.cpp

    r3611 r3659  
    3333    width = 1000; 
    3434    height = 1000; 
     35    links = NULL; 
    3536    temperature = sqrt((double)(width*width + height*height)) / 10; 
    3637} 
     
    4647TNetworkOptimization::~TNetworkOptimization() 
    4748{ 
    48     int i; 
    49     for (i = 0; i < nLinks; i++) 
    50     { 
    51         free(links[i]); 
    52     } 
    53  
    54     free(links); 
     49    free_Links(); 
    5550    free_Carrayptrs(pos); 
    5651} 
     
    120115        if (disp[i] == NULL) 
    121116        { 
    122             cerr << "Couldn't allocate memory\n"; 
     117            cerr << "Couldn't allocate memory (disp[])\n"; 
    123118            exit(1); 
    124119        } 
     
    214209    { 
    215210        free(disp[i]); 
     211        disp[i] = NULL; 
    216212    } 
    217213 
    218214    free(disp); 
     215    disp = NULL; 
    219216    //dumpCoordinates(); 
    220217} 
     
    278275} 
    279276 
     277 
    280278void TNetworkOptimization::setGraph(TGraphAsList *graph) 
    281279{ 
    282     cout << "1" << endl;  
    283     int v, l; 
    284     for (l = 0; l < nLinks; l++) 
    285     { 
    286         free(links[l]); 
    287     } 
    288     cout << "2" << endl;  
    289     free(links); 
    290     cout << "3" << endl;  
     280    free_Links(); 
    291281    free_Carrayptrs(pos); 
    292     cout << "4" << endl;  
     282 
    293283    nVertices = graph->nVertices; 
    294284    int dims[2]; 
    295285    dims[0] = nVertices; 
    296286    dims[1] = 2; 
    297     cout << "5" << endl;  
     287 
    298288    coors = (PyArrayObject *) PyArray_FromDims(2, dims, NPY_DOUBLE); 
    299289    pos = pymatrix_to_Carrayptrs(coors); 
    300290    random(); 
    301  
     291  
    302292    //dumpCoordinates(); 
    303  
    304     links = NULL; 
    305293    nLinks = 0; 
    306     cout << "6" << endl;  
     294    int v; 
    307295    for (v = 0; v < graph->nVertices; v++) 
    308296    { 
     
    316304            if (links == NULL) 
    317305            { 
    318                 cerr << "Couldn't allocate memory\n"; 
     306                cerr << "Couldn't allocate memory (links 1)\n"; 
    319307                exit(1); 
    320308            } 
     
    324312            if (links[nLinks] == NULL) 
    325313            { 
    326                 cerr << "Couldn't allocate memory\n"; 
     314                cerr << "Couldn't allocate memory (links[] 1)\n"; 
    327315                exit(1); 
    328316            } 
     
    341329                if (links == NULL) 
    342330                { 
    343                     cerr << "Couldn't allocate memory\n"; 
     331                    cerr << "Couldn't allocate memory (links 2)\n"; 
    344332                    exit(1); 
    345333                } 
     
    349337                if (links[nLinks] == NULL) 
    350338                { 
    351                     cerr << "Couldn't allocate memory\n"; 
     339                    cerr << "Couldn't allocate memory (links[] 2)\n"; 
    352340                    exit(1); 
    353341                } 
     
    515503                    } 
    516504                    else 
     505                    { 
     506                        file.close(); 
    517507                        return NULL; 
     508                    } 
    518509                } 
    519510                else if (stricmp(words[0].c_str(), "*vertices") == 0) 
     
    525516                        strVertices >> nVertices; 
    526517                        if (nVertices == 0) 
     518                        { 
     519                            file.close(); 
    527520                            return NULL; 
     521                        } 
    528522 
    529523                        //cout << "nVertices: " << nVertices << endl; 
    530524                    } 
    531525                    else 
     526                    { 
     527                        file.close(); 
    532528                        return NULL; 
     529                    } 
    533530 
    534531                    break; 
     
    565562                strIndex >> index; 
    566563                if ((index <= 0) || (index > nVertices)) 
     564                { 
     565                    file.close(); 
    567566                    return NULL; 
     567                } 
    568568 
    569569                //cout << "index: " << index << " n: " << n << endl; 
     
    597597                        if (stricmp(words[i].c_str(), "ic") == 0) 
    598598                        { 
    599                             if (i + 1 < n) i++; else return NULL; 
     599                            if (i + 1 < n)  
     600                                i++;  
     601                            else  
     602                            { 
     603                                file.close(); 
     604                                return NULL; 
     605                            } 
    600606 
    601607                            //cout << "ic: " << words[i] << endl; 
     
    604610                        else if (stricmp(words[i].c_str(), "bc") == 0) 
    605611                        { 
    606                             if (i + 1 < n) i++; else return NULL; 
     612                            if (i + 1 < n)  
     613                                i++;  
     614                            else  
     615                            { 
     616                                file.close(); 
     617                                return NULL; 
     618                            } 
    607619 
    608620                            //cout << "bc: " << words[i] << endl; 
     
    611623                        else if (stricmp(words[i].c_str(), "bw") == 0) 
    612624                        { 
    613                             if (i + 1 < n) i++; else return NULL; 
     625                            if (i + 1 < n)  
     626                                i++;  
     627                            else 
     628                            { 
     629                                file.close(); 
     630                                return NULL; 
     631                            } 
    614632 
    615633                            //cout << "bw: " << words[i] << endl; 
     
    650668                            strI2 >> i2; 
    651669 
    652                             if ((i1 <= 0) || (i1 > nVertices) || (i2 <= 0) || (i2 > nVertices))  
     670                            if ((i1 <= 0) || (i1 > nVertices) || (i2 <= 0) || (i2 > nVertices)) 
     671                            { 
     672                                file.close(); 
    653673                                return NULL; 
     674                            } 
    654675 
    655676                            if (i1 == i2) 
     
    685706                        strI2 >> i2; 
    686707 
    687                         if ((i1 <= 0) || (i1 > nVertices) || (i2 <= 0) || (i2 > nVertices))  
     708                        if ((i1 <= 0) || (i1 > nVertices) || (i2 <= 0) || (i2 > nVertices)) 
     709                        { 
     710                            file.close(); 
    688711                            return NULL; 
     712                        } 
    689713 
    690714                        if (i1 == i2) 
     
    700724        file.close(); 
    701725    } 
    702     else  
    703         cout << "Unable to open file.";  
     726    else 
     727    { 
     728        cout << "Unable to open file " << fn << ".";  
     729        return NULL; 
     730    } 
    704731     
    705732    PExampleTable wtable = table; 
  • source/orangeom/networkoptimization.hpp

    r3606 r3659  
    6666    double **pymatrix_to_Carrayptrs(PyArrayObject *arrayin); 
    6767    void free_Carrayptrs(double **v); 
     68    void free_Links() 
     69    {        
     70        if (links != NULL) 
     71        { 
     72            int i; 
     73            for (i = 0; i < nLinks; i++) 
     74            { 
     75                if (links[i] != NULL) 
     76                { 
     77                    free(links[i]); 
     78                    links[i] = NULL; 
     79                } 
     80            } 
     81 
     82            free(links); 
     83            links = NULL; 
     84        } 
     85    } 
    6886 
    6987    float k; //PR 
Note: See TracChangeset for help on using the changeset viewer.