.at() probleme
-
Ich hab ja gesucht aber er findet nichts.
-
Du solltest doch aber zumindest die Zeile herausfinden, wo der Fehler auftritt, oder?
-
hier mal der Quelltext:
conflib.cpp
#include <iostream> #include <stdlib.h> //exit(); #include "conflib.hpp" conf Zeilen; conf Conf; conf Linien; void confLoad(const char *Pfad) { Conf.File.open(Pfad, std::ios::in); while(!Conf.File.eof()) { Conf.File.getline(Linien.linie, 1024); Zeilen.zeile.push_back(Linien.linie); } } void confClose() { Conf.File.close(); } void confSave(const char *Name) { Conf.File.open(Name, std::ios::out); }conflib.hpp
#ifndef CONFLIB_HPP_INCLUDED #define CONFLIB_HPP_INCLUDED #include <string> #include <vector> #include <fstream> struct conf { char linie[1024]; std::fstream File; std::vector <std::string> zeile; }; extern conf Zeilen; extern conf Conf; extern conf Linien; #endif // CONFLIB_HPP_INCLUDEDconflib_aus
#include <stdlib.h> //exit(); #include <iostream> #include "conflib.hpp" #include "conflib_aus.hpp" conf_aus Search; conf_aus A; conf_aus E; conf_aus Var; void confGroup(const char *Group_Name) { for(unsigned int i=0; i < Zeilen.zeile.size(); i++) { int Ende_Name = Zeilen.zeile[i].size(); if(Zeilen.zeile[i].at(0) == '[' && Zeilen.zeile[i].at(Ende_Name-1) == ']') { Search.Name = Zeilen.zeile[i].substr(1, Ende_Name-1); A.Anfang_Group = i + 1; do { i++; }while(Zeilen.zeile[i].at(0) != '['); E.Ende_Group = i - 1; } } if(Group_Name != Search.Name.c_str()) { exit(0); }else{ exit(-1); } } void confRead(const char *Group_Name, const char *Read_Name) { for(int i = A.Anfang_Group; i < E.Ende_Group; i++) { int j=0; if(Zeilen.zeile[i].at(j) != '=') { j++; } if(Read_Name == Zeilen.zeile[i].substr(0, j)) { exit(0); }else{ exit(-1); } Var.Name_Var = Zeilen.zeile[i].substr(j+1); } std::cout << Var.Name_Var << std::endl; }conflib_aus.hpp
#ifndef CONFLIB_AUS_HPP_INCLUDED #define CONFLIB_AUS_HPP_INCLUDED #include <string> struct conf_aus { std::string Name; int Anfang_Group; int Ende_Group; std::string Name_Var; }; extern conf_aus Search; extern conf_aus A; extern conf_aus E; extern conf_aus Var; #endif // CONFLIB_AUS_HPP_INCLUDEDDebug den Quelltext bitte ich weiß nicht was ich falsch mach.
-
Ich debugge deinen Quelltext jetzt nicht, du musst schon selbst schauen, wo dein Fehler auftritt (hast du einen Breakpoint gesetzt?).
Was mir auffällt, ist dass du in der Datei conflib_aus.cpp mehrfach die Funktion exit() wahrscheinlich falsch verwendest (meinst du da break?).
Außerdem benutzt du die Funktion at() nur in der Datei conflib_aus.cpp, von daher musst du auch nur dort schauen, vermutlich greifst du auf einen char im string zu, obwohl der string nicht so lange ist.
-
so ich hab den Fehler durch ausprobieren herraus bekommen wo die .at() den Fehler verursachen:
[cpp] for(unsigned int i=0; i < Zeilen.zeile.size(); i++)
{
int Ende_Name = Zeilen.zeile[i].size();if(Zeilen.zeile[i][0] == '[' && Zeilen.zeile[i].at(Ende_Name-1) == ']')
{
Search.Name = Zeilen.zeile[i].substr(1, Ende_Name-1);A.Anfang_Group = i + 1;
do
{
i++;
}while(Zeilen.zeile[i][0] != '[');
E.Ende_Group = i - 1;
}}[/cpp]
Das hat der Debugger mir nicht angezeigt.
-
Hast du dir schon den Hinweis von Fellhuhn auf der 2. Seite angeschaut?
-
ja das hab ich auch weg gemacht.
-
In Zeile 27 von conflib_aus prüfst du nicht, ob i außerhalb der Vektorgrößen liegt.
-
Ich prüfe in der Zeile i ob der erste Buchstabe [ ist.
Edit:
Der debugger zeigt mit das an:Building to ensure sources are up-to-date Build succeeded Selecting target: Debug Adding source dir: /media/nico_/sicherung/ubuntu/Projekt/conflib/ Adding source dir: /media/nico_/sicherung/ubuntu/Projekt/conflib/ Adding file: libconflib.a Starting debugger: done Registered new type: wxString Registered new type: STL String Registered new type: STL Vector Setting breakpoints Debugger name and version: GNU gdb (GDB) 7.1-ubuntu No symbol table is loaded. Use the "file" command. Breakpoint 1 ("/media/nico_/sicherung/ubuntu/Projekt/conflib/conflib_aus.cpp:27) pending. No symbol table is loaded. Use the "file" command. Breakpoint 2 ("/media/nico_/sicherung/ubuntu/Projekt/conflib/conflib_aus.cpp:19) pending.
-
gamebuntu schrieb:
Ich prüfe in der Zeile i ob der erste Buchstabe [ ist.
Aber nicht, ob die Zeile i existiert.
-
nein nur ob in der zeile die [ am anfang steht.
-
gamebuntu schrieb:
nein nur ob in der zeile die [ am anfang steht.
Hargnnn, das sollte ein Hinweis auf Verbesserung sein!!
-
ahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
bin ich so dooooooooooooooooooooooofffffffffffff
Stimmt du hast recht ich muss noch prüfen ob es die Zeile überhaupt gibt.
-
Ohne dich wäre ich nie trauf gekommen danke.
