Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

26.12.2009, 23:38

C++ Array/Pointer Problem

Hi,

Ich habe das Problem, dass meine Funktion mit einem Array funktioniert, aber bei einem Pointer nicht. Als Fehler bekomme ich nur "Schlechter PTR" wärend dem laufenden Debug. Leider habe ich keine Lösung finden können. Hier Beispielcode zum Problem:

(ungetestet hoffentlich compilierfähig)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <windows.h>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <tchar.h>
#include <string>
#include <fstream>

        int ReadFile_Line(const char *FileName, std::string *strOut)
        {
            std::ifstream inFile(FileName, std::ios::in|std::ios::binary);
            std::string zeile;
            int i = 0;

            while (getline(inFile, zeile))
            {
                strOut[i] = zeile; //HIER UNTERBRICHT DAS PROGRAMM

                //std::cout << zeile << std::endl;

                i++;
            }

            return 0;
        }

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    char *pFile = "test.txt";
    int Error;

    const int Lines = 100;

//FUNKTIONIERT NICHT

    string *stest;
    stest = new string[Lines];

//FUNKTIONIERT

//string stest[100];


    Error = ReadFile_Line(pFile, stest);

    for(int i = 0; i<Lines; i++)
    {
        cout << stest[i];
    }

    ///////////////////////////


    cin.get();
    return 0;
}


Ich verstehe einfach nicht warum es mit dem Array funktioniert und mit dem dynamisch erzeugten array nicht. Ich hoffe jemand kann mir das erklären.

Gruß

HighligerBimBam

2

27.12.2009, 00:26

ich kann dir nicht sagen warum, aber ich kanns hier ordentlich kompilieren und ausführen (mit MinGW)...

3

27.12.2009, 00:41

Es müsste gehen.
Allerdings ist das Programm natürlich sehr schlecht, da ReadFile_Line keine Ahnung hat,wie groß der Ausgabepuffer sein wird.
DU solltest z.B. eine Reference auf einen std::vector übergeben, welcher dann von ReadFile_Line auf die passende Größe gesetzt wird und gefüllt wird.
Lieber dumm fragen, als dumm bleiben!

4

27.12.2009, 00:44

Zitat

ich kann dir nicht sagen warum, aber ich kanns hier ordentlich kompilieren und ausführen (mit MinGW)...
:shock:

Tolle Sache... Ich habs gerade auch in ein eigenes Projekt gepackt. Dort gehts... Nur da wo es gehen soll bekomme ich den Zugriffsfehler.

Danke dir. Ich brauche jetzt nur ein Seil und ein Balken, dann ist mein Problem gelöst. ;) Keine Ahnung wo ich jetzt mit der Suche beginnen soll um den Fehler zu finden.

5

27.12.2009, 00:59

Ich habe das Problem zwar nicht gefunden, aber behoben :lol:

Habe meine zusätzlichen Testvariablen/Funktionen alle auskommentiert, danach war der Fehler weg ^^

Danke für den Tipp mit der Vectorklasse vielleicht werde ich das später aufnehmen, momentan bestimme ich die Größe einer Datei mit anderen funktionen.

6

27.12.2009, 10:29

Hallo

Warum hat ReadFile_Line einen Rückgabewert? Du gibst doch eh immer 0 zurück, da kannst du dir das auch sparen.

chrische

7

27.12.2009, 14:34

Ich würde auch eher einen std::vector nehmen. Wenn man unbedingt mit new hantieren will (ich sehe keinen Grund dafür), sollte man aber auch ans delete denken.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
void ReadFile_Line(const char *FileName, std::vector<std::string>& strOut) 
{ 
    std::ifstream inFile(FileName, std::ios::in|std::ios::binary); 
    std::string zeile; 

    while (getline(inFile, zeile)) 
    { 
        strOut.push_back(zeile);
    } 
}

8

04.01.2010, 21:40

sind istream_iterator aus der mode gekommen seid ich hier das letzte mal geguckt hab? :D
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Werbeanzeige