Array Über-/Ausgabe fehlerhaft



  • Zeig doch mal die Definition der beteiligten Variablen (Arrays).



  • Erstellen der Matrix:

    Matrix(int r = 0, int c = 0) {
    row = r;
    col = c;
    mat = new unsigned long* [row];
    for(int j = 0; j < row ; j++)
    mat[j] = new unsigned long[col];
    for(int i = 0; i < row ; i++)
    for(int j = 0; j < col ; j++)
    mat[i][j] = 0;
    }

    Matrix(const string &path) {
    int q=0;
    ifstream fin(path.c_str());
    ifstream infile(path.c_str());
    if (!fin) // File Error
    cout << " Sorry the file doesnot exist ";
    else {
    while (infile>>iwert) q++;
    //cout<< q;
    infile.close();
    row=q/4;
    col=4;
    if (path == "helnum.txt"){
    mat = new unsigned long* [row];
    for(int j = 0; j < row ; j++)
    mat[j] = new unsigned long[row];
    for (int c = 0 ; c < col ; c++)
    for (int r = 0 ; r < row ; r++)
    fin >> mat[r][c];
    fin.close();
    } else {
    mat = new unsigned long* [row];
    for(int j = 0; j < row ; j++)
    mat[j] = new unsigned long[col];
    for (int r = 0 ; r < row ; r++)
    for (int c = 0 ; c < col ; c++)
    fin >> mat[r][c];
    fin.close();
    }
    }
    }

    und Spalte A-D unsigned long SpalteA[], ..Spalte D[];



  • Jimmie schrieb:

    und Spalte A-D unsigned long SpalteA[], ..Spalte D[];

    Wie groß?



  • undefiniert, packe da so viel Werte rein, wie nötig, da die Matrix immer unterschiedlich gross ist.
    Hat auch bei anderen Arrays funktioniert, nur wenn ich diese Matrix zuweise funzt es nicht!



  • was meinst du mit

    nur wenn ich diese Matrix zuweise funzt es nicht

    ?

    hast du irgendwo sowas stehen wie

    Matrix a(5,7);
    ...//mach irgendwas mit a
    Matrix b = a;
    

    ?

    dann zeig doch mal bitte deinen copy ctor.



  • Nein, aber ich habe ein Array Zahl[], das auch keine bestimmte Grösse hat und dem ich x-beliebig Werte zuweisen kann. Demnach denke ich, das es mit der Matrix zu tun hat.

    Die Matrix wird aus einer Datei gelesen:
    Beispiel:
    17 395 412 987
    17 395 412 1019
    678 395 567 352
    678 395 567 353

    Die Matrix beinhaltet dann die Werte in mat[r][c]
    wenn ich das cout << A[r]<< " " << mat[r][0]<<"\n"; ausführe direkt hinter der Zuweisung, erhalte ich auch die richtigen Angaben.
    Beispiel
    A[0]=17 mat[0][0]=17
    A[1]=17 mat[1][0]=17
    A[2]=678 mat[2][0]=678
    and so on..

    Die Werte scheinen aber nachdem ich SpalteB auffülle, auch die Werte aus der SpalteA zu überschreiben.
    Denn danach ist SpalteA mit 395,395, 395... etc gefüllt.
    Deswegen denke ich ist es was mit der Zuordnung.



  • mat = new unsigned long* [row]; 
    for(int j = 0; j < row ; j++) 
    mat[j] = new unsigned long[row]; 
    for (int c = 0 ; c < col ; c++) 
    for (int r = 0 ; r < row ; r++) 
    fin >> mat[r][c];
    

    also erstmal ist mat row*row groß, was so wohl nicht gewollt ist. eher col*row.

    zweitens iterierst du in der schleife als erstes über row und dann über col. in dem else zweig iterierst du als erstes über col und dann über row. ich würde das mal konsistent machen.

    was es damit auf sich?

    ifstream fin(path.c_str()); 
    ifstream infile(path.c_str());
    

    warum zweimal?

    was machst du hier?

    while (infile>>iwert) q++;
    

    ok du zählst die einträge, aber warum verwirfst du dann die alten werte anstatt sie in einem vector unterzubringen? um sie dann zb. schneller in die matrix packen zu können.

    warum arbeitest du nicht mit vectoren? wäre doch einfacher oder nicht?



  • Also erst mal danke, du hast ein Fehler gefunden, den ich auch schon etwas länger suche..(row *row Geschichte) *gg*

    Die Matrix ist ja eigentlich nur eindimensional, so habe ich sie konstruiert. Und so funktioniert sie auch.

    Warum ich keine Vektoren nehme? Hmm.. meinst du, das die Zuweisungsprobleme sich dann auflösen werden? Oder meintest du, das ich die Matrix als Vektor umschreiben soll?? Das ist leider nicht so einfach, der Code ist leider nicht so klein, das das so auf die schnelle geht!

    Kann es mal mit den Vektoren versuchen, denke aber nicht, das dadurch das Zuweisungsproblem sich verändern wird....



  • du hast noch nichts zu den anderen fragen von mir geschrieben 😉

    naja, ein vektor ist im allgemeinem etwas einfacher zu handhaben als ein array und der overhead ist wirklich gering.
    aber ich vertstehe das man keine lust hat seinen code umzuschreiben, wenn er noch nicht richtig funzt..aber du könntest es ja bei einem refactoring machen..

    hast du mit nem debugger in mat reingeschaut? ansosnten zeig doch mal den code wo du die matrix verwendest..ggf. finden wir da den fehler..



  • Jimmie schrieb:

    undefiniert, packe da so viel Werte rein, wie nötig, da die Matrix immer unterschiedlich gross ist.
    Hat auch bei anderen Arrays funktioniert, nur wenn ich diese Matrix zuweise funzt es nicht!

    Und wo setzt du die Größe fest? (bei "normalen" Arrays muß die Größe bereits zur Compilezeit angegeben werden - und eine Definition long Spalte[]; ohne Größenangabe ist eigentlich nicht zulässig)


Anmelden zum Antworten