Nowe posty

xx Odpowiednie wykorzystanie rdzeni P i E procesora (1)
Dzisiaj o 06:44:59
xx Samba DC/AD problem z DNS (0)
2024-07-25, 12:42:23
xx DNS i WWW na virtualbox (4)
2024-07-24, 10:30:38
xx Instalacja Manjaro Linux (11)
2024-07-13, 22:57:31
xx Linux Lite 6.6. Po uruchomieniu z DVD przeglądarka Chrome jest nieaktywna (12)
2024-07-10, 22:33:30
xx Laptop MSI CR500 - nie akceptuje linuksa (6)
2024-07-03, 05:30:18
xx Co to jest ? (3)
2024-07-02, 13:36:58
xx Nowa wersja libreoffice (1)
2024-06-30, 18:22:49
xx Dystrybucja - środowisko graficzna dla amigowca (MUI) (4)
2024-06-30, 12:14:25
xx Jaki kod błędu zwracać z kernela? (3)
2024-06-09, 12:29:22

Autor Wątek: KDE - siatka i ikony na pulpicie  (Przeczytany 945 razy)

devilan

  • Gość
KDE - siatka i ikony na pulpicie
« dnia: 2006-01-11, 12:04:21 »
Witam!

Mam problem - w czasie kompilacji programu wszystko przebiega ok, natomiast przy uruchomieniu dostaję informację o naruszeniu pamięci!
/* Plik main.cpp */
#include \\"point.h\\"

int main(int argc, char *argv[])
{
        Point punkt;      //ok
        Point punkciki[800]; //ok
        Point punkty[800] [600]; //powoduje naruszenie ochrony pamieci!
}
/************ end of main.cpp ***************/

/************** point.h *************************/
/* File point.h */

/* This prevent error of adding header multiple times */
#ifndef __CPP_POINT_H
#define __CPP_POINT_H
class Point
{
        public:
                int R, G, B;            // Red, Green, Blue values
                int A, I;               // Alpha and Intensity values
                Point();                // Class default constructor
                Point(int r, int g, int b, int i = 0);  // Class constructor
                Point operator+(Point &rhs);    // Adding operator for Point\\'s
};
#endif
/***************** end of point.h ***********************/

/***************** point.cpp ****************************/
#include \\"point.h\\"


Point::Point()
{
        R = 0;
        G = 0;
        B = 0;
        A = 0;
        I = 0;
}

Point::Point(int r, int g, int b, int i)
{
        R = r;
        G = g;
        B = b;
        I = i;
        A = 0;
}

Point Point::operator+(Point &rhs)
{
        return (Point(rhs.R + R, rhs.G + G, rhs.B + B, rhs.I + I));
}

/************************ end of point.cpp ********************/


Konstrtuktory i ogólnei zakładanie działa dobrze dla pojedynczego punktu jak i wektora punktów, ale dla macierzy powoduje wywieszenie się na etapie konstrukcji obiektu...
Czy ktos ma jakieś pomysły jak to poprawić?

chmooreck

  • Gość
KDE - siatka i ikony na pulpicie
« Odpowiedź #1 dnia: 2006-01-11, 13:13:24 »
nie pomyslales o tym, ze probujesz na stosie odlozyc 9.5 MB danych ?

jak zrobisz tablice [1][1] tez wylatuje ?

devilan

  • Gość
KDE - siatka i ikony na pulpicie
« Odpowiedź #2 dnia: 2006-01-11, 13:22:42 »
2006-01-11 13:13:24 chmooreck napisał:

> nie pomyslales o tym, ze probujesz na stosie odlozyc 9.5 MB danych ?
 >
 > jak zrobisz tablice [1][1] tez wylatuje ?

Nie - nie pomyslalem... nie - nie wylatuje... ni mniej jednak musze napisac program do generacji chmur metoda szumu perlina.
Stad tez kazdy punkt musi posiadac RGB skladowa natezenia I oraz pozniej przeliczana skladowa kanalu Alpha...

W algorytmie generuje sie kilka warstw i dodaje je do siebie, jesli nie moge stworzyc tablicy 800 x 600 punktow, to w takim razie jak mam przechowac obraz o takiej rozdzielczosci w pamieci??

Masz moze jakies propozycje jak to obejsc?

Pozdrawiam
DevilaN

chmooreck

  • Gość
KDE - siatka i ikony na pulpicie
« Odpowiedź #3 dnia: 2006-01-11, 15:00:15 »
po pierwsze.. czy na kazda skladowa potrzebujesz 4 bajtow ? nie wystarczy ci 1 bajt ? - czyli zamiast int\\'a uzyj np char\\'a...

poszukaj jeszcze dyrektywy kompilatora, zeby na pewno pola te umiescil obok siebie w pamieci, tzn zalacz wyrownanie do 1 bajta (byc moze #pragma pack(push,1) i #pragma pack (pop) - ale to jest dla gcc pod win - nie wiem jak jest na likusie... na OS/390 tez moge ci powiedziec ;-) )

po drugie takie ilosci danych lepiej jest utworzyc dynamicznie - nie zapomnij o zwolnieniu ;-)

devilan

  • Gość
KDE - siatka i ikony na pulpicie
« Odpowiedź #4 dnia: 2006-01-11, 15:07:05 »
2006-01-11 15:00:15 chmooreck napisał:

> po pierwsze.. czy na kazda skladowa potrzebujesz 4 bajtow ? nie wystarczy ci 1 bajt ? - czyli
 > zamiast int\\'a uzyj np char\\'a...
 >
 > poszukaj jeszcze dyrektywy kompilatora, zeby na pewno pola te umiescil obok siebie w pamieci,
 > tzn zalacz wyrownanie do 1 bajta (byc moze #pragma pack(push,1) i #pragma pack (pop) - ale to
 > jest dla gcc pod win - nie wiem jak jest na likusie... na OS/390 tez moge ci powiedziec ;-) )
 >
 > po drugie takie ilosci danych lepiej jest utworzyc dynamicznie - nie zapomnij o zwolnieniu ;-)

O! Dzieki :)

Właśnie o to mi chodziło :) W C++ programuje dosyć długo, ale de facto nigdy nie zagłębiałem się w mechanizmy działania tego od strony allokacji pamięci czy operacji na stosie.

Jeszcze raz dziekuje i pozdrawiam
DevilaN

  • Gość
KDE - siatka i ikony na pulpicie
« Odpowiedź #5 dnia: 2006-01-11, 07:53:28 »
Mam dość dziwny problem, mianowicie w KDE nie działa opcja automatycznego wyrównywania ikon w rozdzielczości 1280x1024. Nadmieniam, że wcześniej działała ona bez problemu. Czy jest jakiś sposób, by temu zaradzić, czy to jakiś bug? Czasami jak z menu kontekstowego pulpitu pozmieniam wyrównywanie do siatki i z centrum KDE w "Zachowaniu" będę dawał "domyślne" to zaczyna działać, ale po restarcie znowu to samo... czy ktoś ma jakieś sugestie?