Gość sabby7890 Napisano Kwiecień 7, 2007 Zgłoszenie Share Napisano Kwiecień 7, 2007 Witam, Mam pewien problem:) Otóż zacząłem pisać programy w języku C++, dopiero niedawno przesiadłem się na C - wybrałem go ze względu na jego szybkość. Zająłem się teraz pisaniem programu w GTK 2.0. Staram się napisać program który będzie odpowiednikiem Guitar Pro na Linuksa (może niektórzy znają tą aplikację). Podczas pisania z użyciem bibliotek GTK wszystko idzie dobrze, mogę rysować nuty i tabulaturę, dodawać marginesy itp. Utknąłem jednak w miejscu, od którego powiniem był zacząć Otóż program ten deklaruje bardzo dużo zmiennych (jest to program służący do komponowania muzyki): Tytuł, podtytuł, artysta, notki, tekst utworu - oddzielny dla każdej ścieżki, komentarze dla każdej nuty itp. Oprócz tego musi posiadać kilkanaście innych zmiennych, których niestety nie mogę uniknąć: - ilość ścieżek - parametry danej ścieżki - instrument, głośność, phaser, tremolo, reverb itp. - dla każdej ścieżki tablica z nutami (struna, próg, długość dźwięku, tablica parametrów) - dla każdej nuty - tablica parametrów - dla każdego taktu - powtórzenie, szerokość fizyczna na ekranie itp - dla każdego podciągnięcia - tutaj muszę zapisać cały wykres jak to podciągnięcie ma iść Nie wymieniłem wszystkiego, lecz już przy pierwszym punkcie program mi się wysypuje: Naruszenie ochrony pamięci W C istnieje coś takiego jak malloc(), lecz nie do końca wiem, jak tego używać. Próbowałem: -- basic_callbacks.h -- struct { int num_bars; int bar_width[4096] //maksymalna ilość taktów, zazwyczaj nie przekracza 500, więc int } song_data; -- basic_callbacks.c -- song_data.num_bars = 10; //przykładowy kod; printf(song_data.num_bars); Po uruchomieniu: Narusznie ochrony pamięci Po wykasowaniu jednej zmiennej z której mogłem zrezygnować - wszystko ok. Jednak z wielu nie mogę, dlatego muszę zadać to pytanie: jak ominąć ten problem? W C++ używałem klas i wszystko było ok, tutaj niestety struktury tak nie działają Nie chcę używać gtkmm, chciałbym to napisać w C. Jakby ktoś mógł mnie pokierować, jak ominąć ten problem, byłbym bardzo wdzięczny:) Pozdrawiam, Tomek Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Karlik Napisano Kwiecień 7, 2007 Zgłoszenie Share Napisano Kwiecień 7, 2007 Naruszenie ochrony pamięci się wywala kiedy odwołujesz się do nieswoich danych. Po prostu kiedy wychodzisz poza zakres tablicy, używasz wskaźnika do obiektu, który wcześniej wykasowaleś itp. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Gość sabby7890 Napisano Kwiecień 10, 2007 Zgłoszenie Share Napisano Kwiecień 10, 2007 Naruszenie ochrony pamięci się wywala kiedy odwołujesz się do nieswoich danych. Po prostu kiedy wychodzisz poza zakres tablicy, używasz wskaźnika do obiektu, który wcześniej wykasowaleś itp. Dzięki, rozgryzłem temat:) Pozdrawiam! Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się