Seg fault bei pointer auf struct



  • Hallo

    ich habe folgenden Code:

    typedef struct shape_tree_node
    {
        int		nShapeCount;
        int		*panShapeIds;
        SHPObject   **papsShapeObj;
    
        int		nSubNodes;    
    } SHPTreeNode;
    
    ...
    
    SHPTreeNode* node;
    
    ...
    
    node = SHPTreeFindNodeToId( sTree->psRoot, hit );
    
    SHPTreeNode SHPAPI_CALL1(*)
    SHPTreeFindNodeToId(SHPTreeNode* node, int ID)
    {
    	int i;	
    
    	if ( node->nShapeCount > 0 )
    		for ( i = 0; i < node->nShapeCount; i++ )
    			if ( node->panShapeIds[i] == ID)
    			{		
    				return (node);
    			}			
    
    	for( i = 0; i < node->nSubNodes; i++ )
    		if( node->apsSubNode[i] != NULL ) SHPTreeFindNodeToId( node->apsSubNode[i], ID );	
    }
    

    Meiner Meinung nach sollte ich doch nach der obigen Zuweisung von node auf die Komponenten von node zugreifen können. Wenn ich allerdings

    printf( "Menge an Shapes in Knoten: %d\n", node->nShapeCount );
    

    versuche kriege ich dort ein Segmentation fault.

    Woran kann das liegen?



  • if( node->apsSubNode[i] != NULL ) SHPTreeFindNodeToId( node->apsSubNode[i], ID );

    fehlt da nicht ein return?



  • ja stimmt theoretisch, funktioniert aber auch ohne...



  • Na wenn du meinst.



  • Ja hab ich jetzt in beiden Varianten probiert und es gibt keinen Unterschied.

    Sonst noch jemand einen Vorschlag?



  • Ohne return macht der ganze Abschnitt hier keinen Sinn

    for( i = 0; i < node->nSubNodes; i++ ) 
            if( node->apsSubNode[i] != NULL ) SHPTreeFindNodeToId( node->apsSubNode[i], ID );
    

    Außerdem dürfte dir der Compiler da eine Warnung ausgeben, dass möglicherweise kein Wert zurückgeliefert wird.

    Und wenn du nicht drauf kommst, wo der Fehler sein könnte, pack überall printfs hin und schau, nach welchem printf das Programm crasht. Quasi Debugging für Anfänger.


Log in to reply