<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Forum Pasja Informatyki - Najnowsze z tagiem malloc</title>
<link>https://forum.pasja-informatyki.pl/tag/malloc</link>
<description>Powered by Question2Answer</description>
<item>
<title>Wyciek pamięci (alokacja malloc,realloc)</title>
<link>https://forum.pasja-informatyki.pl/505592/wyciek-pamieci-alokacja-malloc-realloc</link>
<description>

&lt;p&gt;Cześć, mam taki kod niestety wyrzuca mi program ze wzgledu na wyciek pamięci. Wykazuje ze wyciek jest w tych liniach co zaznazyłem na czerwono i pogrubiłem. Jednak mimo tego, że probowalem zwalniac tmp_tab oraz tmp_row nie udaje mi się tego powstrzymać.&amp;nbsp; Jak to poprawnie zwolnic? :(&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;pre&gt;
int load(const char* filename, int*** ptr, enum save_format_t format)
{
    if (filename == NULL || ptr == NULL)
        return 1;

    FILE* fp;

    if (format == fmt_text) {
        if ((fp = fopen(filename, &quot;r&quot;)) == NULL)
        {
            return 2;
        }
    }
    else {
        if ((fp = fopen(filename, &quot;rb&quot;)) == NULL)
        {
            return 2;
        }
    }

    int val;
    int** tab = malloc(sizeof(int*));
    size_t tab_size = 0;
    int* row = NULL;
    size_t row_size = 0;

    int* tmp_row = NULL;


    if (format == fmt_text) {
        while (fscanf(fp, &quot;%d&quot;, &amp;amp;val) == 1)
        {
            tmp_row = realloc(row, sizeof(int) * (row_size + 1));
            if (tmp_row == NULL) {
                free(row);
                destroy(&amp;amp;tab);
                fclose(fp);
                return 4;
            }


            row = tmp_row;
            row[row_size++] = val;
            if (val == -1) {
                int** tmp_tab = realloc(tab, sizeof(int*) * (tab_size + 1 + 1));
                if (tmp_tab == NULL) {
                    destroy(&amp;amp;tab);
                    fclose(fp);
                    return 4;
                }

                tab = tmp_tab;
                tab[tab_size++] = row;
                tab[tab_size] = NULL;
                row = NULL;
                row_size = 0;
            }
        }
        free(tab);
    }
    else {
        while (fread(&amp;amp;val, sizeof(int), 1, fp) == 1)
        {
            &lt;span style=&quot;color:#ff0000&quot;&gt;&lt;strong&gt;tmp_row = realloc(row, sizeof(int) * (row_size + 1));&lt;/strong&gt;&lt;/span&gt;
            if (tmp_row == NULL) {

                destroy(&amp;amp;tab);
                free(row);
        
                fclose(fp);
                return 4;
            }



            row = tmp_row;
            row[row_size++] = val;
            if (val == -1) {
             &lt;strong&gt;&lt;span style=&quot;color:#ff0000&quot;&gt;   int** tmp_tab = realloc(tab, sizeof(int*) * (tab_size + 1 + 1));&lt;/span&gt;&lt;/strong&gt;
                if (tmp_tab == NULL) {
                    destroy(&amp;amp;tab);
                    free(row);
                    fclose(fp);
                    return 4;
                }

                tab = tmp_tab;
                tab[tab_size++] = row;
                tab[tab_size] = NULL;
                row = NULL;
                row_size = 0;

                
            }
        }
        free(tmp_row);
    }



    
    fclose(fp);
    return 0;
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/505592/wyciek-pamieci-alokacja-malloc-realloc</guid>
<pubDate>Tue, 25 Aug 2020 15:07:52 +0000</pubDate>
</item>
<item>
<title>Funkcja malloc zgłasza segmentation fault ,gdy próbuję alokować prostą strukturę</title>
<link>https://forum.pasja-informatyki.pl/505462/funkcja-malloc-zglasza-segmentation-fault-gdy-probuje-alokowac-prosta-strukture</link>
<description>

&lt;p&gt;Witam. Musiałem zaprojektować prymitywną forward_list w języku C.Mam problem z następującym kodem, który reprezentuje:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
typedef struct q_node
{
   int key;
   struct q_node* next;
}q_node;

typedef struct queue
{
    size_t size;
    struct q_node* tail;
    struct q_node* head;
}queue;

q_node* make_node(int new_key)
{
   /* TUTAJ ZGŁASZA WYJĄTEK*/ q_node* new_node = malloc(sizeof (struct q_node));
    new_node-&amp;gt;key = new_key;
    new_node-&amp;gt;next = NULL;
    return new_node;
}

void queue_push_back(struct queue* queue,int new_key)
{
    //wywołuje funkcję make_node()
}&lt;/pre&gt;



&lt;p&gt;Problem polega na tym ,że funkcja malloc zgłasza wyjątek segmentation fault ,w funkcji make_node () ( sprawdzałęm w debugerze) . Ktoś wie dlaczego może tak być ? Z góry dziękuję za pomoc :D&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/505462/funkcja-malloc-zglasza-segmentation-fault-gdy-probuje-alokowac-prosta-strukture</guid>
<pubDate>Mon, 24 Aug 2020 16:14:05 +0000</pubDate>
</item>
<item>
<title>Wskaźnik na strukturę w tablicy dynamicznej</title>
<link>https://forum.pasja-informatyki.pl/390135/wskaznik-na-strukture-w-tablicy-dynamicznej</link>
<description>

&lt;p&gt;Mam zmienną struct Struktura {int i; char c; float f;}. Alokuję tablicę tab takich struktur a potem w kolejnych komórkach tablicy tab umieszczam adresy kolejnych utworzonych Struktura. Jak mam się odwołać aby poprzez adres w komórce tablicy zmienić wartość w polu struktury? Jak wywołać na końcu funkcji losuj() zwrócenie adresu tablicy? Jest mi on potrzebny na zewnątrz tej funkcji jako argument innych funkcji&lt;/p&gt;



&lt;pre class=&quot;brush:plain;&quot;&gt;
int losuj(int n){
  struct Struktura**tab=(struct Struktura**)malloc(n*sizeof(struct Struktura*));

   for (i = 0; i&amp;lt;=N; i++){
        tab[i]=(struct Struktura*)malloc(sizeof(struct Struktura));
       


        //Struktura[i].i=rand()%10000-1000;
        //Struktura[i].c=(char)rand()%22+66;
        //Struktura[i].f=1000+i;

    }

}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/390135/wskaznik-na-strukture-w-tablicy-dynamicznej</guid>
<pubDate>Tue, 30 Oct 2018 22:03:40 +0000</pubDate>
</item>
<item>
<title>Dynamiczna alokacja pamięci w funkcji - C</title>
<link>https://forum.pasja-informatyki.pl/359408/dynamiczna-alokacja-pamieci-w-funkcji-c</link>
<description>

&lt;p&gt;Witam,&lt;/p&gt;



&lt;p&gt;Czy przedstawione przeze mnie sposoby alokacji pamięci w funkcji są poprawne?&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;

#define N 10

int* alokacja01();
void alokacja02(int* tab);


int main()
{
    //*********** do funkcja alokacja01   ***********************
    int* tab01 = alokacja01();
    //jakies operacje na tab01
    free(tab01);


    //*********** do funkcja alokacja02   ***********************
    int* tab02;
    alokacja02(&amp;amp;tab02);
    //jakies operacje na tab02
    free(tab02);

    return 0;
}

//******************************************
int* alokacja01()
{
    int* tab = (int*)malloc(N*sizeof(int));
    return tab;
}

//******************************************
void alokacja02(int* tab)
{
    tab = (int*)malloc(N*sizeof(int));
}
&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/359408/dynamiczna-alokacja-pamieci-w-funkcji-c</guid>
<pubDate>Tue, 19 Jun 2018 23:09:16 +0000</pubDate>
</item>
<item>
<title>Dynamiczna tablica w C</title>
<link>https://forum.pasja-informatyki.pl/346388/dynamiczna-tablica-w-c</link>
<description>

&lt;pre class=&quot;brush:cpp;&quot;&gt;
int *m = (int*)malloc(6 * sizeof(int));&lt;/pre&gt;



&lt;p&gt;Jak wypełnić taką tablicę? W każdym przypadku, w którym próbuję to zrobić dostaję komunikat o tym, że inicjalizuję zbyt wiele wartości, przy czym każda liczba wartości większa niż jeden jest dla kompilatora zbyt duża - jakby nie widział, że chodzi mi o zainicjalizowanie tablicy, nie pojedynczej zmiennej.&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/346388/dynamiczna-tablica-w-c</guid>
<pubDate>Thu, 26 Apr 2018 18:18:32 +0000</pubDate>
</item>
<item>
<title>Malloc - cannot access memory at address</title>
<link>https://forum.pasja-informatyki.pl/321816/malloc-cannot-access-memory-at-address</link>
<description>

&lt;p&gt;Witam,
&lt;br&gt;

&lt;br&gt;
Spory czas nie zaglądałem do języków C/C++ i napotkałem na pewien problem. Może ktoś mi podpowiedzieć rozwiązanie? Zapewne przegapiłem coś oczywistego.
&lt;br&gt;

&lt;br&gt;
Błąd &quot;.cannot access memory at address...&quot; występuje w miejscu wywołania linii:
&lt;br&gt;
wsk -&amp;gt; Wypisz();
&lt;br&gt;

&lt;br&gt;
Kod programu:
&lt;br&gt;
&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;

using namespace std;

class Ksztalt{
public:
    virtual void Wypisz() = 0;
    virtual ~Ksztalt(){
        cout &amp;lt;&amp;lt; &quot;Niszcze ksztalt&quot; &amp;lt;&amp;lt; endl;
    }
};

class Kwadrat :public Ksztalt{
public:

    static Kwadrat* Create(){
        return (Kwadrat*) malloc(sizeof(Kwadrat));
    }

    virtual void Wypisz(){
        cout &amp;lt;&amp;lt; &quot;Jestem kwadrat&quot; &amp;lt;&amp;lt; endl;
    }

    ~Kwadrat(){
        cout &amp;lt;&amp;lt; &quot;Niszcze kwadrat&quot; &amp;lt;&amp;lt; endl;
    }
};

class Prostokat :public Ksztalt{
public:

    static Prostokat* Create(){
        return (Prostokat*) malloc(sizeof(Prostokat));
    }

    virtual void Wypisz(){
        cout &amp;lt;&amp;lt; &quot;Jestem prostokat&quot; &amp;lt;&amp;lt; endl;
    }

    ~Prostokat(){
        cout &amp;lt;&amp;lt; &quot;Niszcze prostokat&quot; &amp;lt;&amp;lt; endl;
    }
};

int main()
{
    Ksztalt *wsk;

    wsk = Kwadrat::Create();
    wsk -&amp;gt; Wypisz();
    free(wsk);
    wsk = Prostokat::Create();
    wsk -&amp;gt; Wypisz();
    free(wsk);

    return 0;
}
&lt;/pre&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/321816/malloc-cannot-access-memory-at-address</guid>
<pubDate>Sat, 27 Jan 2018 13:08:26 +0000</pubDate>
</item>
<item>
<title>Malloc i funkcja free</title>
<link>https://forum.pasja-informatyki.pl/306060/malloc-i-funkcja-free</link>
<description>

&lt;p&gt;Dlaczego po odpaleniu wywala mi błąd?&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;


int main() {
	int i,rozmiar = 5;
	int *tab;
	tab = (int*)malloc(rozmiar * sizeof(int));
	
	for(i=0;i&amp;lt;rozmiar;i++){
	printf(&quot;%d\n&quot;,tab);
	tab++;
	};
	
	free (tab);
	return 0;
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/306060/malloc-i-funkcja-free</guid>
<pubDate>Fri, 24 Nov 2017 23:17:50 +0000</pubDate>
</item>
<item>
<title>Dlaczego w argumencie funkcji malloc do wyniku działania funkcji strlen dodaje się jeden?</title>
<link>https://forum.pasja-informatyki.pl/303548/dlaczego-argumencie-funkcji-malloc-wyniku-dzialania-funkcji-strlen-dodaje-jeden</link>
<description>

&lt;p&gt;Witam,&lt;/p&gt;



&lt;p&gt;Mam napisaną taką funkcję, lecz niestety nie rozumiem dlaczego w argumencie funkcji malloc do wyniku działania funkcji strlen dodaje się jeden?&lt;/p&gt;



&lt;pre class=&quot;brush:plain;&quot;&gt;
// Funkcja dodajaca nowa osobe do dziennika
int dodaj(char* nowe_imie_nazwisko, float* nowe_oceny)
{
    char* kopia;
    int i;

    if(indeks&amp;lt;MAX-1) // sprawdzanie, czy jest jeszcze miejsce w tablicy
    {
        kopia=malloc((strlen(nowe_imie_nazwisko)+1)*sizeof(char)); // rezerwacja pamieci, adres zarezerwowanego obszaru wpisywany do wskaznika 'kopia'
        strcpy(kopia, nowe_imie_nazwisko); // kopiowanie ciagu znakowego 'nowe_imie_nazwisko' pod adres w 'kopia'
        dane[indeks]=kopia; // element dane[indeks] wskazuje teraz na to samo co 'kopia'

        for(i=0; i&amp;lt;LICZBA_ZADAN; i++)
            oceny[indeks][i]=nowe_oceny[i]; // przepisanie ocen

        return indeks++; // zwraca numer studenta
    }
    else
        return -1; // nie ma juz miejsca w tablicy

}&lt;/pre&gt;



&lt;p&gt;Dziękuję&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;C&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/303548/dlaczego-argumencie-funkcji-malloc-wyniku-dzialania-funkcji-strlen-dodaje-jeden</guid>
<pubDate>Thu, 16 Nov 2017 08:36:31 +0000</pubDate>
</item>
<item>
<title>Dynamiczne przydzielanie pamięci malloc</title>
<link>https://forum.pasja-informatyki.pl/303390/dynamiczne-przydzielanie-pamieci-malloc</link>
<description>

&lt;p&gt;Witam &lt;img alt=&quot;laugh&quot; src=&quot;https://forum.pasja-informatyki.pl/qa-plugin/ckeditor4/plugins/smiley/images/teeth_smile.png&quot; style=&quot;height:23px; width:23px&quot; title=&quot;laugh&quot;&gt;&lt;/p&gt;



&lt;p&gt;ponieważ dowiedziałem się dzisiaj, że używanie w mallocu zmiennej, która jest wczytywana od użytkownika jest niezgodne z standardem i jedyny słuszny sposób to deklarowanie stałej wielkości w mallocu, np. malloc(5 * sizeof(int)).&lt;/p&gt;



&lt;p&gt;A więc czy podany kod jest poprawny, bo widziałem na internecie wiele kodów używających malloca w podobny sposób.&lt;/p&gt;



&lt;p&gt;Jeśli ten kod jest zły to istnieje jakiś inny sposób na alokacje tablicy o rozmiarze określonym przez użytkownika?&lt;/p&gt;



&lt;p&gt;Pozdrawiam&amp;nbsp;&lt;img alt=&quot;smiley&quot; src=&quot;https://forum.pasja-informatyki.pl/qa-plugin/ckeditor4/plugins/smiley/images/regular_smile.png&quot; style=&quot;height:23px; width:23px&quot; title=&quot;smiley&quot;&gt;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;

int main()
{
    int rozmiar;
    printf(&quot;Podaj rozmiar tablicy: &quot;);
    scanf(&quot;%d&quot;, &amp;amp;rozmiar);

    int * tab = malloc(rozmiar * sizeof(int));

    free(tab);
    return 0;
}
&lt;/pre&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/303390/dynamiczne-przydzielanie-pamieci-malloc</guid>
<pubDate>Wed, 15 Nov 2017 16:26:12 +0000</pubDate>
</item>
<item>
<title>Malloc i wyciek pamięci</title>
<link>https://forum.pasja-informatyki.pl/265810/malloc-i-wyciek-pamieci</link>
<description>

&lt;pre class=&quot;brush:plain;&quot;&gt;
char *ptr;
int i;
for (i=2; i&amp;lt;=5; i++) {
   ptr = malloc(i);
}
free(ptr);
&lt;/pre&gt;



&lt;p&gt;Cześć! Mam pytanie odnośnie powyższego zadania. Jaki będzie wyciek pamięci po wykonaniu się tego kodu? Wiem, że malloc przyjmuje ilość bajtów do dynamicznej rezerwacji w pamięci, ale nie do końca chyba rozumiem jak poniższy kod działa:&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Według mnie wyciek pamięci będzie równy &lt;strong&gt;9 bajtów&lt;/strong&gt;, ponieważ pętla wykona się 4 razy rezerwując za każdym razem odpowiednio 2,3,4 oraz 5 bajtów, a po tym wszystkim funkcja free(ptr) wyczyści pamięć tylko z ostatniej iteracji, zatem reszta nie zostanie wyczyszczona więc wyciek pamięci będzie równy 9 bajtów.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Czy ktoś mógłby potwierdzić/zaprzeczyć i w tym drugim przypadku opisać jak działa powyższy kod i jaki będzie faktyczny wyciek?&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/265810/malloc-i-wyciek-pamieci</guid>
<pubDate>Fri, 30 Jun 2017 11:59:20 +0000</pubDate>
</item>
<item>
<title>Proszę o wyjaśnienie : tablica wskaźników , odczyt z pliku, malloc().</title>
<link>https://forum.pasja-informatyki.pl/224992/prosze-o-wyjasnienie-tablica-wskaznikow-odczyt-z-pliku-malloc</link>
<description>

&lt;p&gt;Witam&lt;/p&gt;



&lt;p&gt;Próbuję odczytać dane z pliku i umieścić je w buforze. Zamiast tworzyć 30 tablic chcę stworzyć tablice wskaźników aby tam umieścić wskaźniki do poszczególnych stringów. A więc w main() zadeklarowałem pamięć&lt;/p&gt;



&lt;pre class=&quot;brush:as3;&quot;&gt;
 char **bufor=(char**)malloc(30 * sizeof(char));
    for(i=0;i&amp;lt;30;i++){
        bufor[i]=(char*)malloc(300 * sizeof(char));
    }&lt;/pre&gt;



&lt;p&gt;1)Proszę&amp;nbsp;mnie poprawić ale jeśli dobrze rozumuję zrobiłem coś następującego.&amp;nbsp;
&lt;br&gt;
Zadeklarowałem wskaźnik , który określa początek miejsca w pamięci gdzie kolejno będzie utworzonych 30 wskaźników do zmiennej typu char. Następnie dla każdego wskaźnika przypisałem pamięć 300 &quot;pól&quot; z czego każde pole jest wielkości char. Tak?
&lt;br&gt;

&lt;br&gt;
2)Czy powyższy zapis jest równoważny &amp;nbsp;z tym zapisem jeśli zdefiniujemy tą tablicę jako zmienną globalną i zostanie ona z racji tego zainicjowana &amp;nbsp;zerami? &amp;nbsp; &amp;nbsp;char*bufor[30];&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;3) Funkcję wczytująca dane z pliku wywołałem w ten sposób &amp;nbsp; &amp;nbsp; &amp;nbsp;read(bufor)&lt;/p&gt;



&lt;p&gt;&amp;nbsp; &amp;nbsp; a zdefiniowałem następująco &amp;nbsp; &amp;nbsp; &amp;nbsp; void read(char**buf)&lt;/p&gt;



&lt;p&gt;Czy to znaczy że wysłałem do funkcji jako argument wskaźnik do wskaźników na char?&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;4)Następnie przy użyciu poniższego kodu próbuję pobrać kolejne linie i zapisać je w pamięci.&lt;/p&gt;



&lt;pre class=&quot;brush:as3;&quot;&gt;
i=0;
while( (fgets(buf[i],350,plik))!=NULL){
       
        puts(buf[i]);
        i++;
}&lt;/pre&gt;



&lt;p&gt;Nie chce działać. Kiedy w main() próbuję wyświetlić zawartość char**bufor są tam same śmieci i w połowie program się wysypuje.
&lt;br&gt;
CO ciekawe gdy używam lokalnej zwykłej tablicy wszystko działa.&amp;nbsp;Na przykład :&lt;/p&gt;



&lt;pre class=&quot;brush:as3;&quot;&gt;
char lokalny[1000]; 
while( (fgets(lokalny,350,plik))!=NULL){
        puts(lokalny);&lt;/pre&gt;



&lt;p&gt;}&lt;/p&gt;



&lt;p&gt;Prosiłbym o pomoc w rozwiązaniu tego i napisanie czy dobrze rozumuje powyższe zagadnienia.&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/224992/prosze-o-wyjasnienie-tablica-wskaznikow-odczyt-z-pliku-malloc</guid>
<pubDate>Wed, 08 Feb 2017 16:17:58 +0000</pubDate>
</item>
<item>
<title>Jak wyciągnąć metadane z malloca?</title>
<link>https://forum.pasja-informatyki.pl/220184/jak-wyciagnac-metadane-z-malloca</link>
<description>Cześć, ostatnio sobie przeglądałem jak działa malloc i wyczytałem na stacku, że kiedy deklarujemy w pamięci jakieś dane, to malloc przed albo za tymi danymi tworzy dodatkowe dane, w których przechowywane są informacje takie jak następny blok w pamięci albo rozmiar tego bloku. Czy to prawda? Jak można pobrać te dane (nie wiem czy są &amp;quot;z przodu&amp;quot; danych, czy &amp;quot;z tyłu&amp;quot;)?</description>
<category>Offtop</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/220184/jak-wyciagnac-metadane-z-malloca</guid>
<pubDate>Wed, 25 Jan 2017 22:43:28 +0000</pubDate>
</item>
<item>
<title>Malloc linux</title>
<link>https://forum.pasja-informatyki.pl/217791/malloc-linux</link>
<description>

&lt;p&gt;Witam, mam taki kod:&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;math.h&amp;gt;

int a, b, n, i=0; licznik=0, liczba;

int main()
{
   printf(&quot;Podaj a: &quot;);
    scanf(&quot;%d&quot;, &amp;amp;a);
    printf(&quot;Podaj b: &quot;);
    scanf(&quot;%d&quot;, &amp;amp;b);
    printf(&quot;Podaj n: &quot;);
    scanf(&quot;%d&quot;, &amp;amp;n);
    printf(&quot;\n&quot;);
    int *tab;
    tab=(int*)malloc(n*sizeof(int));
    for(i=0; i&amp;lt;n; i++)
    {
        printf(&quot;Liczba %d: &quot;, i+1);
        scanf(&quot;%d&quot;, &amp;amp;liczba);
        if((liczba%2==0)&amp;amp;&amp;amp;(liczba&amp;gt;=a &amp;amp;&amp;amp; liczba&amp;lt;=b))
        {
            tab[i]=liczba;
            licznik++;
        }
    }
    if(licznik&amp;gt;0)
    {
        printf(&quot;\n&quot;);
        printf(&quot;Podano %d liczb sposrod nich %d liczby: &quot;, n, licznik);
        for(i=0; i&amp;lt;n; i++)
        {
            if((tab[i]%2==0)&amp;amp;&amp;amp;(tab[i]&amp;gt;=a &amp;amp;&amp;amp; tab[i]&amp;lt;=b))
                printf(&quot;%d i &quot;, tab[i]);
        }
        printf(&quot;spelniaja warunki poniewaz sa parzyste i naleza do przedzialu &amp;lt;%d,%d&amp;gt; &quot;, a, b);
        printf(&quot;\n&quot;);
    }
    else
    {
        printf(&quot;Podano %d liczb sposrod nich %d liczb spelnia warunek poniewaz nie sa parzyste lub nie naleza do przedzialu &quot;, n, licznik);
    }
    return 0;
}&lt;/pre&gt;



&lt;p&gt;I bład w linuxie&lt;/p&gt;



&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=10173932108538419477&quot; style=&quot;height:1066px; width:600px&quot;&gt;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/217791/malloc-linux</guid>
<pubDate>Thu, 19 Jan 2017 14:29:28 +0000</pubDate>
</item>
<item>
<title>Dynamiczna tablica dwuwymiarowa - C</title>
<link>https://forum.pasja-informatyki.pl/213170/dynamiczna-tablica-dwuwymiarowa-c</link>
<description>Czy wytłumaczy mi ktoś jak działa przydzialenia pamięci funkcją malloc w tym przypadku?&lt;br /&gt;
Wg materiałów, które mam dynamiczną tablice 2D definiuje się tak:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;int (*tablica)[x];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;tablica=(int(*)[x])malloc(x*y*sizeof(int));&lt;br /&gt;
&lt;br /&gt;
gdzie x i y to wymiary tablicy.&lt;br /&gt;
&lt;br /&gt;
Rozumiem, że pierwsza linijka to deklaracja wskaźnika na x elementową tablicę, ale co dzieje się potem?</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/213170/dynamiczna-tablica-dwuwymiarowa-c</guid>
<pubDate>Fri, 06 Jan 2017 13:40:29 +0000</pubDate>
</item>
<item>
<title>alokacja pamieci, funkcja malloc, język c</title>
<link>https://forum.pasja-informatyki.pl/205923/alokacja-pamieci-funkcja-malloc-jezyk-c</link>
<description>Witam, mam małe kłopoty z funkcją mającą alokować dynamicznie w pamieci nową tablice,zawierającą trzy argumenty:num - ilosc elementów tablicy, start-wartośc pierwszego element, oraz step-każdy kolejny element jest sumą: wartosc poprzedniego + step, wie ktoś może czemu program się zawiesza jak próbuje wywołac tą funkcje?&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://wklej.org/id/2988494/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://wklej.org/id/2988494/&lt;/a&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/205923/alokacja-pamieci-funkcja-malloc-jezyk-c</guid>
<pubDate>Tue, 13 Dec 2016 22:22:25 +0000</pubDate>
</item>
<item>
<title>Wczytywanie wyrazów z pliku. Liczba wyrazów w pliku [C]</title>
<link>https://forum.pasja-informatyki.pl/197750/wczytywanie-wyrazow-z-pliku-liczba-wyrazow-w-pliku-c</link>
<description>Cześć,&lt;br /&gt;
&lt;br /&gt;
Dopiero zaczynam zabawę z programowaniem w języku C, więc proszę o wyrozumiałość. Chcę wczytać wyrazy z pliku do tablicy tak, aby potem móc ją posortować. Dodam, że nie wiem ile będzie wyrazów w pliku, a może być ich bardzo dużo dlatego mój pomysł ze stworzeniem tablicy dwuwymiarowej &amp;quot;na sztywno&amp;quot; nie jest zbyt dobry, bo po pierwsze wiem, że marnuje pamięć w przypadku, gdy wyrazów jest mało, a gdy plików jest dużo mogą się nie zmieścić w tablicy. Próbowałem oswoić się z funkcjami typu malloc czy buforami, ale przyznam szczerze, że jeszcze nie do końca to rozumiem, a więc zostałem przy dwuwymiarowej tablicy. Miałem pomysł, żeby chociaż jeden wymiar tablicy uzależnić od tego jak dużo jest wyrazów w pliku. Chciałbym policzyć wyrazy w pliku i później stworzyć tablicę z odpowiednią liczbą wierszy (długość wyrazów, czyli drugi wymiar ustaliłbym &amp;quot;na sztywno&amp;quot; albo znalazł najdłuższy wyraz i tak wpisał). Jak się do tego zabrać i jakie rozwiązanie mi doradzacie?&lt;br /&gt;
&lt;br /&gt;
Z góry dziękuje.</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/197750/wczytywanie-wyrazow-z-pliku-liczba-wyrazow-w-pliku-c</guid>
<pubDate>Wed, 16 Nov 2016 21:36:22 +0000</pubDate>
</item>
<item>
<title>[C] Przydzielanie pamięci - malloc</title>
<link>https://forum.pasja-informatyki.pl/177592/c-przydzielanie-pamieci-malloc</link>
<description>

&lt;p&gt;Cześć,&amp;nbsp;&lt;/p&gt;



&lt;p&gt;mam problem z funkcją malloc, konkretnie gdy przydzielam pamięć w funkcji main, program poprawnie powiadamia o niemożności przydzielenia pamięci gdy tablica liczb jest zbyt duża. Napisałem jednak funkcję za pomocą której przydzielam pamięć:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;

int przydziel(int n, int m, int ** *tab)
{
  int j;
      *tab=malloc(n*sizeof(int*));
      if(*tab==NULL)
      {
          printf(&quot;nie mozna przydzielic pamieci\n&quot;);
          return 1;
      }
      else{
      for(j=0; j&amp;lt;n; j++)
      {
         *(*tab+j)=malloc(m*sizeof(int));
         if(*(*tab+j)==NULL)
         {
             printf(&quot;nie mozna przydzielic\n&quot;);
             return 1;
         }
      }
        return 0;
      }
}&lt;/pre&gt;



&lt;p&gt;przy użyciu program wyświetla komunikat o nie przydzieleniu pamięci jednak nie zwraca wartości 1 a &quot;wysypuje&quot; się. Jestem ciekaw, dlaczego tak się dzieje?&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/177592/c-przydzielanie-pamieci-malloc</guid>
<pubDate>Fri, 09 Sep 2016 12:34:25 +0000</pubDate>
</item>
<item>
<title>Nieużytki pamięci</title>
<link>https://forum.pasja-informatyki.pl/89859/nieuzytki-pamieci</link>
<description>

&lt;pre class=&quot;brush:as3;&quot;&gt;
Witam. Mam problem z kwestią nieużytków pamięci. Wiem tyle, że powstają, kiedy deklarujemy tablice oraz jeśli używamy funkcji malloc. Jednak jak to dokładnie działa. Mam do tego dwa pytania. Proszę o jakąś pomoc i wyjaśnienie. :) &lt;/pre&gt;



&lt;ol&gt;
	

&lt;li&gt;&amp;nbsp;Czy w main() {int *i1; i1=(int*)malloc(4); i1++;} wystepuja nieuzytki pamieci?&lt;/li&gt;
	

&lt;li&gt;Czy w main() {int tab[3]; *i1; i1=tab; *i1=4; i1++;} występują nieużytki pamięci?&lt;/li&gt;
	

&lt;li&gt;&amp;nbsp;Czy w main() {int *i1, *i2; i1=(int*)malloc(4); i2=i1++;} wystepuja nieuzytki pamieci?&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Moim zdaniem w każdym z tych przypadków występują.&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/89859/nieuzytki-pamieci</guid>
<pubDate>Thu, 17 Dec 2015 16:03:19 +0000</pubDate>
</item>
<item>
<title>Dynamiczne przydzielanie pamięci</title>
<link>https://forum.pasja-informatyki.pl/83959/dynamiczne-przydzielanie-pamieci</link>
<description>

&lt;p&gt;Witam. Mam za zadanie wypisać dwie macierze o wymiarach m1xm2 oraz n1xn2 w języku C bez użycia znaków z użyciem wskaźników.
&lt;br&gt;
&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;

int main()
{
    int i, j, k, l, m1, m2, n1, n2;
    scanf(&quot;%d %d&quot;, &amp;amp;m1, &amp;amp;m2);
    int** mac = malloc(m1 * sizeof(int*));
    for(i=0; i&amp;lt;m1; i++) *(mac + i)=malloc(m2 * sizeof(int));

    for(i=0; i&amp;lt;m1; i++)
        for(j=0; j&amp;lt;m2; j++) scanf(&quot;%d&quot;, *(*mac+i*m2+j));

    scanf(&quot;%d %d&quot;, &amp;amp;n1, &amp;amp;n2);
    int** mac2 = malloc(n1 * sizeof(int*));
    for(k=0; k&amp;lt;n1; k++) *(mac2 + k)=malloc(n2 * sizeof(int));

    for(k=0; k&amp;lt;n1; k++)
        for(l=0; l&amp;lt;n2; l++) scanf(&quot;%d&quot;, *(*mac2+k*n2+l));

    for (i=0; i&amp;lt;m1; ++i) free(*(mac+i));
    free(mac);
     for (k=0; k&amp;lt;n1; ++k) free(*(mac2+k));
     free(mac2);

    return 0;
}&lt;/pre&gt;



&lt;p&gt;
&lt;br&gt;

&lt;br&gt;
&amp;nbsp;
&lt;br&gt;

&lt;br&gt;
Ale przy wczytywaniu liczb program przerywa działanie.. W czym może tkwić problem?&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/83959/dynamiczne-przydzielanie-pamieci</guid>
<pubDate>Sat, 28 Nov 2015 11:52:59 +0000</pubDate>
</item>
</channel>
</rss>