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.