Mraauuu [ Pretorianin ]
Problem c++
Mam program w c++ i próbuję go skompilować w dev c ale nie działa. Koledze program działa na linuxie. U mnie pogram się kompiluje ale po wyświetleniu po chwili konczy swoją pracę z napisen: "...has stopeed working...". Dodam, że po uruchomieniu programu powinienem wstawić w lini poleceń plik, z którego powinien pobrać dane do programu.
W czym może być błąd?
mac2000 [ Konsul ]
Spróbuj zapuścić debugera albo pokaż kod.
wysiak [ Legend ]
Stawiam, ze wklepales gdzies sciezki do plikow/katalogow ze slashami w zla strone.
Mraauuu [ Pretorianin ]
#include <fstream>
#include <iostream>
#include<cctype>
using namespace std;
int main(int argc, char** argv)
int* tablica; // przechowuje wszystkie liczby wczytane z pliku
int* histogram; // liczy ile liczb znajduje sie w kazdym z przedzialow
int dlugosc=0; // liczba wszystkich wczytanych liczb
int podzial=atoi(argv[2]); // ile przedzialow
char temp[3]; // tymczasowa zmienna przechowujaca liczby w formacie znakowym
ifstream plik(argv[1]); // otworzenie pliku
while (!(plik.eof())) //powtarzaj dopoki nie nastapil koniec pliku
dlugosc++;
plik.getline(temp,256); // pobierz liczbe
plik.seekg(plik.beg); // przewin plik do poczatku
tablica = new int[dlugosc]; // stworz tablice tablica o ilosci elementow okreslonej przez dlugosc
histogram = new int[podzial]; // stworz tablice histogram o ilosci elementow okreslonej przez podzial
for (int a=0;a<podzial;a++)
histogram[a]=0; // w kazdym przedziale nie ma zadnych liczb
for (int a=0;a<dlugosc;a++)
plik.getline(temp,256); // pobierz liczbe z pliku
tablica[a]=atoi(temp); // konwertuj z lanuchca znakow do tablicy wszytskich liczb
plik.close(); // zamknij plik
for (int a=0;a<dlugosc;a++)
histogram[tablica[a]*podzial/100]++;
for (int a=0;a<podzial;a++)
if (a==podzial-1)
cout << "[" << a*(100/podzial)+1 << "," << "100" << "]"<<"\t \t";
else
cout << "[" << a*(100/podzial)+1 << "," << ((a+1)*(100/podzial)) << "]";
for (int b=0;b<histogram[a];b++)
cout << "*";
cout << "\n";
cin>>temp;
return 0;
Moby7777 [ Generaďż˝ ]
@wysiak: Linux się gubi ale w Windowsach (przynajmniej od XP) to akurat obojętne... A co do problemu to ja raczej stawiam na jakieś biblioteki systemowe ale bez kodu to faktycznie możemy sobie gdybać.
[edit] w jaki sposób przekazujesz nazwę pliku? I czy jesteś pewny, że na pewno taki plik istnieje w miejscu, w którym program go szuka?
Mraauuu [ Pretorianin ]
Chyba powinienem z linii poleceń to przekazywać. A tego pytania czy szuka w dobry miejscu to nie rozumiem.
wysiak [ Legend ]
Podaj komende jaka toto uruchamiasz.
Mraauuu [ Pretorianin ]
ja pracuje na devie wiec klikam F9(kompiluj i uruchom) i sie program otwiera i wywala
peanut [ kriegsmaschine ]
temp[3], getline(temp, 256) <- tu pewnie ladujesz do tablicy 256znakow?
pozniej sypiesz jakimis newami, a nigdzie nie ma delete. generalnie jakas kaszana ostra, albo ja juz niewyraznie widze o tej godzinie.
argv[1] to pierwszy argument w linii komend. sprawdz najpierw argc czy jest > 1.
ps. olej deva. sciagnij sobie visual studio.
Mraauuu [ Pretorianin ]
tak jest napisane po wywaleniu w szczegółach:
Problem signature:
Problem Event Name: APPCRASH
Application Name: lolek.exe
Application Version: 0.0.0.0
Application Timestamp: 4ae8b78b
Fault Module Name: msvcrt.dll
Fault Module Version: 7.0.7100.0
Fault Module Timestamp: 49eea5fe
Exception Code: c0000005
Exception Offset: 0000c999
OS Version: 6.1.7100.2.0.0.256.1
Locale ID: 1045
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789
wysiak [ Legend ]
Nie dotykalem C++ od studiow, ale czy argv[x] nie oznacza zmiennych uruchomieniowych programu?:) Ktorych ty - jak sam napisales - w ogole nie podajesz? A twoj kolega najwyrazniej podaje.
peanut [ kriegsmaschine ]
na msdnie mozesz szukac sobie bledow tych bibliotek, generalnie pewnie program sam sobie robi kuku jakims stack overflowem.
argc - liczba parametrow (lacznie z nazwa programu)
argv[] - nazwa programu, param1, param2, etc
doctor_greenthumb [ Pretorianin ]
Wrzuciłem z ciekawości kod do edytora i skompilował się bez błędu, tyle że pod linuxem.
K_Kakarotto [ Satyros ]
int podzial=atoi(argv[2]);
"ifstream plik(argv[1]);"
Linie wyżej czytają parametry uruchomieniowe programu, musiałbyś sobie w kompilatorze ustawić te parametry (nie wiem czy Dev posiada taką możliwość).
Ewentualnie możesz to zastąpić przez podanie w programie na sztywno parametrów lub zrobić interakcję z użytkownikiem na zasadzie "podaj parametr..."
doctor_greenthumb [ Pretorianin ]
Nie no program najeżony błędami. Mraauuu pozatym mógłbyś przedstawić ideę co program ma realizować.
likfidator2 [ Konsul ]
Tak jak pisali inni. Program oczekuje podania nazwy pliku do wczytania jako parametru.
Najprostszy sposób, to skompilować program, otworzyć konsolkę (cmd), wejść do folderu gdzie jest skompilowany plik lolek.exe i uruchomić go:
np. lolek.exe nazwa_pliku.txt
Drugi sposób, to zmienić opcję kompilatora, żeby podczas uruchamiania dodawał parametry linii poleceń.
Trzeci sposób, to wklepanie na sztywno do kodu programu nazwy testowego pliku.