Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 2. diel - Dynamická alokácia pamäte v jazyku C

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Odpovedá na emedla
Pavel Habžanský:6.12.2015 23:12

Nepřetypováváš přímo tu adresu, jenom tím říkáš, co se na tý adrese bude ukládat (v tomto případě int). Takhle bych to dovedl asi nejsnáze vysvětlit

Odpovedať
Čím větší výzva, tím větší zkušenost
Avatar
David Novák
Tvůrce
Avatar
Odpovedá na mnauik
David Novák:7.12.2015 10:30

valgrind

Odpovedať
Chyba je mezi klávesnicí a židlí.
Avatar
Odpovedá na mnauik
Neaktivní uživatel:7.12.2015 11:17

gcc -d main.c / g++ -d main.cpp
valgrind ./a.out
jak pise David N. Valgrind je nejlepsi varianta..navic kdyz do kompilace pridas prepinac -d bude se ti to kompilovat s debugovacima symbolama ... takze se potom v tom valgrindu podivas cos pokazil...

pripadne jestli chces mi fakt cistej kod kompiluj takhle
gcc -d -Wall -pedantic main.c / g++ -d -Wall -pedantic main.cpp

to ti z kazdyho warningu udela error a rve to na tebe kdyz porusujes standardy .. ;) bav se

Odpovedať
Neaktivní uživatelský účet
Avatar
David Novák
Tvůrce
Avatar
Odpovedá na Neaktivní uživatel
David Novák:7.12.2015 11:50

Trochu poopravím..

gcc -Wall -Wextra -pedantic // vypíše všechny možné varování
gcc -Wall -Wextra -pedantic -Werror // bere je jako chyby - nutí tě psát validně
gcc -g // přidává debugovací informace

Můžeš prosím tě v krátkosti říct, co dělá -d ? Nechce se mi to studovat a kompilace s tímto přepínačem mi vypíše "no input files". Nakoukl jsem do manuálu a myslím, že to má produkovat výstupy jednotlivých fází překladu. -da vyprodukuje vše.. Docela zajímavý výstup.. Ale myslím, že jsi asi myslel -g :)

Odpovedať
Chyba je mezi klávesnicí a židlí.
Avatar
David Novák
Tvůrce
Avatar
Odpovedá na David Novák
David Novák:7.12.2015 11:52

Jo a u toho -pedantic je ještě velmi vhodné uvést konkrétní standard, jinak tě ti to bude nutit výchozí, což bude asi iso 89..

gcc -std=c11 -pedantic // varuje, když použiješ něco, co není v C11 standardu
Odpovedať
Chyba je mezi klávesnicí a židlí.
Avatar
Odpovedá na David Novák
Neaktivní uživatel:7.12.2015 12:47

urcite jsem myslel -g :D jen jsem nepremyslel diky za doplneni ...

Odpovedať
Neaktivní uživatelský účet
Avatar
Lukáš Hypša:6.1.2018 18:35

Když zadám jako počet intů 9, vypíše se pouze RUN_SUCCESFUL, při 10 se vypíšou i čísla v cyklu, při 11 se vypíše pouze RUN FAILED. Neví někdo?

int pocet = 10; // pro 9, 10 a 11 se program chová odlišně
int *p_cisla = (int *) malloc(sizeof(int) * pocet);
for(int i = 0; i < pocet; i++)
{
*p_cisla = i;
printf("%d ", *p_cisla);
p_cisla++;
}
free(p_cisla);
p_cisla = NULL;
return (EXIT_SUCCESS);

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Lukáš Hypša
DarkCoder:6.1.2018 21:51

Vytvořený ukazatel na začátek pole je třeba považovat za konstantu a není dovoleno jej měnit. Pro přístup a výpis prvků dynamického pole ukazuje následující kód:

int pocet = 10;
int *p_cisla = (int *)malloc(sizeof(int) * pocet);
for (int i = 0; i < pocet; i++) {
        *(p_cisla + i) = i;
        printf("%d ", *(p_cisla + i));
}
free(p_cisla);
p_cisla = NULL;
Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Patrik Pastor:30.8.2019 12:26

prave jsem z prdele vyzkousel:

#include <stdio.h>
 1 #include <stdlib.h>
 2
 3 int main (void) {
 4
 5    int *pi;
 6     for(int i =0; i<999999999999 ; i++)
 7        pi = (int*) malloc(sizeof(int)*100);
 8
 9       printf("sem tu\n");
10
11    return 0;
12 }
13
  • pocitac se mi zaseknul ze vubec nereagoval, tak sem ho manualne restartoval, pri nabootovani se to cele procistilo a uz v cajku, ale ale to celkem prdel toto delat, kdyz vim ze OS se postara, aby se vse vycistilo :D
Editované
Avatar
Odpovedá na DarkCoder
Patrik Pastor:30.8.2019 12:32

ale vubec to neni tak jak @David_Capka napsal :

Nejhorší situace je, když paměť zapomeneme uvolnit v nějakém cyklu. Paměť nám při této chybě samozřejmě za nějakou dobu dojde, aplikace spadne a uživatel přijde o data a zaplatí raději konkurenci, aby mu prodala funkční aplikaci

Nic takoveho se nestalo, pamet sice dosla, ale ja jsem o zadne data neprisel a operacni system se o vse postaral. Chyba se tedy muze stat (neumyslne), ale pochybuji, ze by nekdo kvuli tomu se za konkurenci, aby mu prodala funkcni aplikaci - to mi prijde smesne.

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 29.