Zapsání hodnot do pole – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zapsání hodnot do pole – C / C++ – Fórum – Programujte.comZapsání hodnot do pole – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Kenvelo+2
Super člen
17. 10. 2013   #1
-
0
-

Zdravíčko, docela sem se zamotal do menšího příkladu. 

int value_update;
int* p_Updates = new int [value_update];
cout << "Update : \n";

cin >> value_update;
p_Updates[value_update];

Když nastavím velikost pole - jak do něho nastavím hodnoty  když předem nevím jak pole bude velké  ? Vím, že to dělá přes for cyklus ale nějak netuším jak. (Pole samotné o sobě vypsat umím)

Nahlásit jako SPAM
IP: 89.177.211.–
Díky bohu, že počítače vymysleli muži. Kdyby to byly ženy, tak binární soustavu reprezentují jedničky, nuly a "možná"
17. 10. 2013   #2
-
0
-

co použít vector?

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Kenvelo+2
Super člen
17. 10. 2013   #3
-
0
-

#2 hlucheucho
http://www.youtube.com/watch?v=pzbTYhOvbpA

díky =))

Nahlásit jako SPAM
IP: 89.177.211.–
Díky bohu, že počítače vymysleli muži. Kdyby to byly ženy, tak binární soustavu reprezentují jedničky, nuly a "možná"
17. 10. 2013   #4
-
0
-

pokud bys chtěl vlastní implementaci vektoru, musel bys vymyslet implementaci, která realokuje paměť tak, aby bylo možné přidat další prvek do pole. Asi by to vyžadovalo mít proměnnou ve které by byla uložena velikost pole a ukazatel na paměť, kde pole leží. Přidání prvku by pak probíhalo takto:

1. zvýším velikost o 1
2. zavolám realloc s novou velikostí pole
3. zapíšu prvek na konec pole

Myslím, že vektor eviduje jednak počet prvků, které obsahuje, jednak na kolik prvků je alokována paměť (což omezuje počet realokování paměti a administrativu s tím spojenou).

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Kenvelo+2
Super člen
17. 10. 2013   #5
-
0
-

#4 hlucheucho
Mno mě ze začátku napadlo něco takového ale to je asi blbost že ?  

int value_update;
int* p_Updates = new int [value_update];
cout << "Update : \n";

cin >> value_update;
p_Updates[value_update];


for( int i = 0; i < value_update; i++)
{

   int* p_array_Value = new int;
   cout << "Value for : " << p_Updates[i] << "\n";

   cin >> *p_array_Value;
   p_Updates[i] = *p_array_Value;
   delete p_array_Value;

   if ( i == value_update)
   {
      for (i = 0; i < value_update; i++)
      {
         cout << p_Updates[i]<<"\n";
      }
   }						
}
Nahlásit jako SPAM
IP: 89.177.211.–
Díky bohu, že počítače vymysleli muži. Kdyby to byly ženy, tak binární soustavu reprezentují jedničky, nuly a "možná"
Kenvelo+2
Super člen
17. 10. 2013   #6
-
0
-

#4 hlucheucho
Tak vyřešeno vytvořil sem to takto a funguje to. 

		int value_update;
		int* p_Updates = new int [];
		int* p_array_Value = new int;
		cout << "Update : \n";

		cin >> value_update;
		p_Updates[value_update];
		int i;

		for(  i = 0; i < value_update; i++)
		{

			
			cout << "Value for : "  << "\n";

			cout << (i+1)<<" ";;
			cin >> *p_array_Value;
			p_Updates[i] = (int)*p_array_Value;
			cout <<"\n";

		}

				for (int i = 0; i < value_update; i++)
				{
					cout << p_Updates[i]<<"\n";
				}
			
		delete [] p_Updates;
		delete p_array_Value;
Nahlásit jako SPAM
IP: 89.177.211.–
Díky bohu, že počítače vymysleli muži. Kdyby to byly ženy, tak binární soustavu reprezentují jedničky, nuly a "možná"
KIIV
~ Moderátor
+43
God of flame
17. 10. 2013   #7
-
0
-

#6 Kenvelo
odbornym pohledem se mi zda, ze to muze fungovat jen uplnou nahodou (zkus schvalne aspon par stovek prvku)

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KIIV
~ Moderátor
+43
God of flame
17. 10. 2013   #8
-
0
-

 pro 1000 prvku: (a new int[0] - protoze  int[] neproslo pres kompilator)

==16351== 
==16351== HEAP SUMMARY:
==16351==     in use at exit: 0 bytes in 0 blocks
==16351==   total heap usage: 2 allocs, 2 frees, 4 bytes allocated
==16351== 
==16351== All heap blocks were freed -- no leaks are possible
==16351== 
==16351== ERROR SUMMARY: 1998 errors from 2 contexts (suppressed: 2 from 2)
==16351== 
==16351== 999 errors in context 1 of 2:
==16351== Invalid read of size 4
==16351==    at 0x4009BC: main (in a.out)
==16351==  Address 0x5a07040 is 0 bytes after a block of size 0 alloc'd
==16351==    at 0x4C2AC27: operator new[](unsigned long) (in memcheck-amd64-linux.so)
==16351==    by 0x4008E5: main (in a.out)
==16351== 
==16351== 
==16351== 999 errors in context 2 of 2:
==16351== Invalid write of size 4
==16351==    at 0x400980: main (in a.out)
==16351==  Address 0x5a07040 is 0 bytes after a block of size 0 alloc'd
==16351==    at 0x4C2AC27: operator new[](unsigned long) (in memcheck-amd64-linux.so)
==16351==    by 0x4008E5: main (in a.out)
==16351== 
==16351== 
==16351== ERROR SUMMARY: 1998 errors from 2 contexts (suppressed: 2 from 2)
Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kenvelo+2
Super člen
17. 10. 2013   #9
-
0
-

#8 KIIV
Teď sem zkusil a prošlo mi i 2000 prvků ale až po odmazání uvolnění paměti 

delete [] p_Updates;
delete p_array_Value;

Tak nevím co s tím 

Nahlásit jako SPAM
IP: 89.177.211.–
Díky bohu, že počítače vymysleli muži. Kdyby to byly ženy, tak binární soustavu reprezentují jedničky, nuly a "možná"
Kenvelo+2
Super člen
17. 10. 2013   #10
-
0
-

#8 KIIV

Připojen obrázek.

Tak teda funguje i s uvolňováním měl sem tam chybu proto mi to nešlo. .. ale funguje i 5000 prvků

Nahlásit jako SPAM
IP: 89.177.211.–
Díky bohu, že počítače vymysleli muži. Kdyby to byly ženy, tak binární soustavu reprezentují jedničky, nuly a "možná"
KIIV
~ Moderátor
+43
God of flame
17. 10. 2013   #11
-
0
-

to ze to proslo neznamena, ze nelikvidujes pamet kolem

zkus si dat nejaky promenny pred a po tom poli co pouzivas ... (samozrejme dynamicky alokovany)

a do nich nejakou konkretni hodnotu.. pokud bude po skonceni jina - smatas vedle

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kenvelo+2
Super člen
17. 10. 2013   #12
-
0
-

#11 KIIV
Vypsali se mi správě jak hodnoty v poli tak i proměnný

Nahlásit jako SPAM
IP: 89.177.211.–
Díky bohu, že počítače vymysleli muži. Kdyby to byly ženy, tak binární soustavu reprezentují jedničky, nuly a "možná"
KIIV
~ Moderátor
+43
God of flame
17. 10. 2013   #13
-
0
-

#12 Kenvelo
tohle krachuje uz pri 7 na segfault...

Edit: mimochodem aby to neco prepisovalo tak se tech 5000 musi vyplnit.. ne ze jen vyplnis 5 z nich.. tos jeste poradne nezacal prepisovat vsechno za polem

#include <iostream>
#include <memory>
using namespace std;

class test {
  public:
    int array[50];
    test() {
        cout << "konstruktor(" << this << "): ";
        for (int i=0; i<50; ++i) { array[i]=12345; cout << i << "("<< array[i] << ") "; }
        cout << endl;
    }
    ~test() {
        cout << "destruktor(" << this << "): ";
        for (int i=0; i<50; ++i) { cout << i << "("<< array[i] << ") "; }
        cout << endl;
    }
};


int main() {

		int value_update;

    test* pred = new test;
		int* p_Updates = new int [0];
    test* po = new test;


		int* p_array_Value = new int;

		cout << "Update : \n";

		cin >> value_update;
		p_Updates[value_update];
		int i;

		for(  i = 0; i < value_update; i++)
		{

			
			cout << "Value for : "  << "\n";

			cout << (i+1)<<" ";
			cin >> *p_array_Value;
      cout << p_Updates + i << endl;
			p_Updates[i] = (int)*p_array_Value;
			cout <<"\n";

		}

				for (int i = 0; i < value_update; i++)
				{
					cout << p_Updates[i]<<"\n";
				}
			
		delete [] p_Updates;
		delete p_array_Value;
    delete po;
    delete pred;
}
Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KIIV
~ Moderátor
+43
God of flame
17. 10. 2013   #14
-
0
-

a kdyz sem tam pridal trosku offsetu (aby to neprepisovalo nejakou dulezitou cast objektu tj. i+30):

destruktor(0x20d7100): 0(12345) 1(12345) 2(12345) 3(12345) 4(12345) 5(12345) 6(12345) 7(12345) 8(12345) 9(12345) 10(12345) 11(12345) 12(12345) 13(12345) 14(12345) 15(12345) 16(12345) 17(12345) 18(12345) 19(12345) 20(12345) 21(12345) 22(1) 23(2) 24(3) 25(4) 26(5) 27(6) 28(7) 29(8) 30(1) 31(2) 32(12345) 33(12345) 34(12345) 35(12345) 36(12345) 37(12345) 38(12345) 39(12345) 40(12345) 41(12345) 42(12345) 43(12345) 44(12345) 45(12345) 46(12345) 47(12345) 48(12345) 49(12345)

vsechny hodnoty by mely byt spravne 12345

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kenvelo+2
Super člen
17. 10. 2013   #15
-
0
-

#14 KIIV
Takže jedině přes vector ? 

Nahlásit jako SPAM
IP: 89.177.211.–
Díky bohu, že počítače vymysleli muži. Kdyby to byly ženy, tak binární soustavu reprezentují jedničky, nuly a "možná"
KIIV
~ Moderátor
+43
God of flame
17. 10. 2013   #16
-
0
-

nemusi byt nutne pres vector... muzes alokovat to pole AZ PO TOM, kdy nactes jeho velikost... alokace s [0] je nesmysl (ikdyz nejakej ten bajt to alokuje asi stejne pro jistotu)

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Řešení
KIIV
~ Moderátor
+43
God of flame
17. 10. 2013   #17
-
+1
-
Zajímavé
Vyřešeno Nejlepší odpověď

ja nevim.. treba takhle?

		cout << "Update : \n";
		int value_update;
		cin >> value_update;

		int* p_Updates = new int[value_update];

		int i;
		for(  i = 0; i < value_update; ++i)
		{
			cout << "Value for : "  << "\n";
			cout << (i+1)<<" ";
			cin >> p_Updates[i];
		}

		for (int i = 0; i < value_update; ++i)
		{
			cout << p_Updates[i]<<"\n";
		}
			
		delete [] p_Updates;
Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kenvelo+2
Super člen
17. 10. 2013   #18
-
0
-

#17 KIIV
Já si myslím, že dobrý =) díky 

Nahlásit jako SPAM
IP: 89.177.211.–
Díky bohu, že počítače vymysleli muži. Kdyby to byly ženy, tak binární soustavu reprezentují jedničky, nuly a "možná"
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 30 hostů

Moderátoři diskuze

 

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