Diese Schlussfolgerung ist falsch.
Der Compiler versucht, dein Programm zu übersetzen. Selbst wenn ihm das gelingt, können da immer noch jede Menge logischer Fehler drin sein, d.h. das Programm tut nicht, was es soll.
Kommt drauf an. Was hast du dir bei dem Rückgabewert denn gedacht? Welchen Zweck soll er erfüllen? Soll er wiedergeben, ob der Test erfolgreich war? Du wertest den Rückgabewert in main jedenfalls nicht aus.
Ein paar logische Fehler fallen mir sofort auf:
Die Bedingung einer for-Schleife (bei dir o>=ktngr) bestimmt, wie lange die Schleife ausgeführt wird. In deinem Fall wird die Schleife überhaupt nicht ausgeführt, weil o gleich 0 ist, und ktngr vermutlich größer. Die Schleifenbedingung ist keine "Abbruchbedingung", auch wenn man sie oft so nennt, sondern eigentlich eine "Weitermachbedingung".
Dein if-Konstrukt ist auch logisch falsch. Wenn die erste Bedingung nicht zutrifft, also sub == "0" ist, dann ist die nächste immer wahr, denn "0" ist immer != "1". Der Rest des Konstrukts wird nie betreten.
Der Absturz passiert meiner Meinung nach an einer anderen Stelle des Codes, die du nicht gezeigt hast.