Anonymní profil Gavier – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Gavier – Programujte.comAnonymní profil Gavier – Programujte.com

 

Příspěvky odeslané z IP adresy 85.93.124.–

C / C++ › Ukazatel na proměnou třídy
5. 3. 2014   #187908

#2 vitamin
Díky za odpověd.

Hlavní důvod proč se ptám je, že vektor při přidávání/odebírání prvků může jednotlivé prvky realokovat, takže není bezpečné ukladat si ukazatele na položky vektoru.

Z toho mě napadlo jestli podobná situace nemůže nastat se samotným vektorem. Nebo obecně s jakoukoli proměnou třídy. Jestli se nemůže stát, že proměné budou v paměti "zpřeházeny" z důvodu lepšího využití paměti nebo něco (bez toho aniž bych sám s vytvořenou instancí manipuloval).

C / C++ › Ukazatel na proměnou třídy
5. 3. 2014   #187904

 Mám třídu:

class Foo {
    
    private:
        
        std::vector<int> intVect;

    public:
        
        std::vector<int>* getIntVect() {
            return &intVect;
        }
};

Třídu Foo vždy instanciuji pomocí new Foo(). Je bezpečné takto vracet ukazatel a s ním pracovat?

Nemůže se stát, že z nějakého důvodu bude intVect přesunut a ukazatel se stane nevalidním? Samozřejmě počítam jen s dobou dokud Foo sám neuvolním.

Předem díky za odpověd.

Gavier
C / C++ › Prohození ukazatelů
12. 12. 2011   #151164

Dobrý den,

potřeboval bych prohodit ukazatele na data dvou prvků pole. Pole potřebuji setřídit, ale jelikož je dynamicky alokováno každý prvek pole může mít různou hodnotu, proto nemůžu při řazení prohodit přímo hodnoty.

Pokoušel jsem se nastudovat jak bych to měl správně udělat, ale prohození ukazatelů neproběhne. Zde je kod jednoho z pokusů.


char *a[];
char **tmp1,**tmp2;
        tmp1=&a[iPos];
        tmp2=&a[iMin];
        *a[iPos]=**tmp2;
        *a[iMin]=**tmp1;
C / C++ › C - alokace dymanicke matice…
22. 11. 2011   #150302

#2 liborb
Díky moc

C / C++ › C - alokace dymanicke matice…
22. 11. 2011   #150291

Dobrý den,

programuji část programu, která alokuje dynamické pole o dvou rozměrech s tím, že samotnou alokaci chci ve funkci.

Funkce má jeden parametr (strukturu obsahující velikost matice a ukazatel na matici) a bude vracet int hodnotu. Naprogramoval jsem program který funguje, ale funkce vrací samotnou strukturu a já chci aby se změnila jen v parametru. Tuším, že se použijí ukazatelé, ale úplně nerozumím jejich použití. Předem díky za odpověď.

#include <stdio.h>
#include <stdlib.h>

/* Struktura obsahujici udaje o matici */
typedef struct Matrix
{
  int rowc;
  int colc;
  int **mat;
}TMatrix;

/* Alokace matice */
TMatrix matrix_alloc(TMatrix matrix)
{
  matrix.mat = (int**)malloc(matrix.colc * sizeof(int*));
  for (int i = 0; i <= matrix.colc; i++)
    matrix.mat[i] = (int*)malloc(matrix.rowc * sizeof(int));

  return matrix;
}

int main()
{
  TMatrix matrix =
  { // inicializace
    .rowc = 6,
    .colc = 6,
  };

  // alokace matice
  matrix = matrix_alloc(matrix);

  // test alokace
  for (int i = 0; i < matrix.rowc; i++)
  {
    for (int j = 0; j < matrix.colc; j++)
    {
        matrix.mat[i][j]=i*j;
        printf("%4d",matrix.mat[i][j]);
    }
    printf("\n");
  }

    return EXIT_SUCCESS;
}
C / C++ › C - scanf zacykleni
15. 11. 2011   #150053

Tak fflush(stdin) neni nejstastnejsi, při hodnotach "1 2 3 50 60 \ENTER" zpracuje 1 a ostatni zahodi. Coz je pochopitele, kdyz fflush(stdin) vyprazdni buffer a pri cteni se nejdriv nactou data do bufferu a az pote se snimi pracuje.

Jak jinak je mozne se zbavit "smeti"?

C / C++ › C - scanf zacykleni
15. 11. 2011   #150050

#2 KIIV

zaprve scanf nevraci nikdy EOF... vraci pocet uspesne nactenych parametru (kdyz nic nenacte -> 0 ne EOF (coz je tusim neco jako -1)

Zkousel jsem to a kdyz scanf nacte EOF, tak vrati hodnotu -1 (coz je EOF).

K tomu ostatnímu, při použití fflush(stdin); uz vse funguje jak ma. Diky

C / C++ › C - scanf zacykleni
15. 11. 2011   #150047

Dobrý den,

mám program, který postupně čte čísla,s každým provede výpočet a ten potom vytiskne.

 V podstatě můj kód vypadá takto:

#include <stdio.h>
#include <stdlib.h>

int main()
{
  double x;
  int cteni;

  while((cteni = scanf("%lf", &x)) != EOF)
  {
    if (cteni == 0)
      x = 0.0/0.0; //NAN
    printf("%lf\n", x = x * x);
  }

  return 0;
}

Čtení tedy ukončuji EOF, a když nastane chyba při čtení čísla počítá se s hodnotou NAN.

Když zadávám korektní čísla, tak vše funguje, ale jakmile zadám písmeno tak se zacykli a vypisuje NAN.

Proč je program zacyklí? Když se nepodaří přečíst číslo, cteni by se mělo rovnat 0, vytisknout se jednou NAN a poté číst další číslo, ale tak to zjevně není když to nefunguje.

Předem děkuji za odpověď.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý