Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++, SFML]Duża tablica dynamiczna, problem

Ostatnio zmodyfikowano 2012-11-19 18:29
Autor Wiadomość
bingo009
Temat założony przez niniejszego użytkownika
[C++, SFML]Duża tablica dynamiczna, problem
» 2012-11-18 15:51:13
Witam was serdecznie, otóż piszę sobie edytor map 2D i mam problem. Na początku w konsoli podaje szerokość mapy(wysokość zawsze ta sama) i tworzę tablicę dynamiczną i tej szerokości i wysokości 12. Działa to jak należy, ale jak podam wartość szerokość mniejszą od 3 i większą od 65 zaczynają się problemy. Kiedy później usiłuję załadować sf:;Texture, to program wywala mi błąd pokazując na jakaś funkcję w pliku malloc.c. O co tutaj chodzi? Wrzucam cały kod(wiem, że paskudnie napisany, ale to taki na szybko edytor):
C/C++
#include <iostream>
#include <vector>
#include "Kafel.h"

using namespace std;
using namespace sf;

int szerokosc;
int aktywnykafel = 0;
char ** mapka;
int kafelek;
int mapax = 0;
vector < Tile > kafelki;
RenderWindow window( VideoMode( 640, 480, 32 ), "Map Editor" );
Sprite pusty;

void CreateTab( int w )
{
    mapka = new char *[ w ];
   
    for( int x = 0; x < w; x++ )
         mapka[ x ] = new char[ 12 ];
   
    for( int x = 0; x < 12; ++x )
    for( int z = 0; z < w; ++z )
         mapka[ x ][ z ] = 0;
   
}

void DrawMap()
{
    for( int i = 0; i < 12; ++i )
    {
        for( int j = 0; j < szerokosc - mapax; ++j )
        {
            kafelek = mapka[ i ][ j + mapax ];
            kafelki[ kafelek ].setPosition( j * 40, i * 40 );
            window.draw( kafelki[ kafelek ] );
        }
    }
   
}

int main()
{
    for( int i = 0; i < 3; ++i )
    {
        Tile kafelek( "teren.jpg", i * 40, 0, 40, 40 );
        kafelki.push_back( kafelek );
    }
   
    cout << "Podaj szerokosc mapy: ";
    cin >> szerokosc;
    CreateTab( szerokosc );
    Event event;
    Texture pasek;
    Sprite pasek2;
   
    pasek.loadFromFile( "pasek.jpg" ); //Robiac testy, odkrylem ze program dochodzi do tej linijki
    pasek2.setTexture( pasek );
    pasek2.setPosition( 600, 0 );
   
   
    while( window.isOpen() )
    {
        while( window.pollEvent( event ) )
        {
            if( event.type == Event::Closed ) window.close();
           
        }
        window.clear();
        DrawMap();
        window.draw( pasek2 );
        for( int i = 0; i < kafelki.size(); ++i )
        {
            kafelki[ i ].setPosition( 600, i * 40 );
            window.draw( kafelki[ i ] );
        }
        window.display();
    }
   
    for( int x = 0; x < szerokosc; x++ )
         delete[] mapka[ x ];
   
    delete[] mapka;
   
    return 0;
   
}

Pominąłem klasę Tile, bo ona jest nie istotna w tym momencie. O co tutaj chodzi? Przypominam, problem zaczyna się po podaniu wartości szerokość mniejszej od 3 i większej od 65.
P-69481
DejaVu
» 2012-11-19 16:15:54
Kiedy później usiłuję załadować sf::Texture, to program wywala mi błąd pokazując na jakaś funkcję w pliku malloc.c.
Czy w klasie Tile istnieje pole sf::Texture...?
P-69557
bingo009
Temat założony przez niniejszego użytkownika
» 2012-11-19 18:29:12
Instnieje jedynie statyczny obiekt sf::Texture w konstruktorze, sama klasa dziedziczy po sf::Sprite.
P-69577
« 1 »
  Strona 1 z 1