Dynamická alokace – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Dynamická alokace – C / C++ – Fórum – Programujte.comDynamická alokace – C / C++ – Fórum – Programujte.com

 

Bananovnik
~ Anonymní uživatel
7 příspěvků
14. 12. 2013   #1
-
0
-

Zdravím, mohl by mi prosím někdo poradit ohledně tohoto kódu: 

void zvetsitPole(int **arr, int &a)
{
    int *arr2 = new int [a + 1];
    for (int i = 0; i < a; i++)
        arr2[i] = *arr[i];
    delete [] arr;
    *arr = arr2;
    a++;

}


void zaplnPole(int *arr, int &a)
{
    for (int i = 0; i < 10; i++)
    {
        zvetsitPole(&arr, a);
        arr[i] = 5;

    }
}

int main()
{


    int a = 5;
    int *arr = new int [a];
    zaplnPole(arr,a);    
    

    for (int i = 0; i < a; i++)
    cout << "pha:  "<<arr[i] << endl;


    return 0;
}

 problém mám asi s předáním pole ve funkci zaplnpole do zvetsit pole... poraďte prosím jak to zprovoznit

Nahlásit jako SPAM
IP: 88.100.200.–
KIIV
~ Moderátor
+43
God of flame
14. 12. 2013   #2
-
0
-

veskutecnosti mas problem s vracenim spravneho pointeru ze zaplnPole ven...  int * arr v definici funkce jaksi udela kopii adresy ve funkci, ven se nova nedostane

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Bananovnik
~ Anonymní uživatel
7 příspěvků
14. 12. 2013   #3
-
0
-

tak jsem zkusila vytvořit něco, co se tváří, že funguje, ale když se snažím ve funkci zvetsitpole o delete[]arr, tak se mi program po spuštění ukončí.. je předání toho pointeru pořád špatně ?

void zvetsitPole(int (*arr), int &a)
{
    int *arr2 = new int [a + 1];
    for (int i = 0; i < a; i++)
        arr2[i] = arr[i];
    //delete [] arr;
    arr = arr2;
    a++;
}

void zaplnPole(int (*arr), int &a)
{
    for (int i = 0; i < 10; i++)
    {
        zvetsitPole(arr, a);
        arr[i] = i;
    }
}

int main()
{
    int a = 0;
    int *arr = new int [a];
    zaplnPole(arr,a);

    for (int i = 0; i < a; i++)
    cout << "pha:  "<<arr[i] << endl;

    delete [] arr;

    return 0;
}

Nahlásit jako SPAM
IP: 88.100.200.–
KIIV
~ Moderátor
+43
God of flame
14. 12. 2013   #4
-
0
-

doporucuju pridat si vypisy, kde co mas za pointery...

mimochodem   int * arr je stejne blbe jako   int (*arr)

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Robo
~ Anonymní uživatel
82 příspěvků
14. 12. 2013   #5
-
0
-

#3 Bananovnik
Ako chceš niečo k niečomu pridať, keď si to práve vymazala ? :D

delete [] arr;
*arr = arr2;

Najskôr to zmažeš pomocou delete a potom príkaz *arr nemá zmysel, keďže to *arr už neexistuje
 

Nahlásit jako SPAM
IP: 178.253.165.–
Bananovnik
~ Anonymní uživatel
7 příspěvků
14. 12. 2013   #6
-
0
-

no, vidíš to, ještě ke všemu... já už se vzdávám, to prostě nedám dokupy, celý den tím zabitý a nic

Nahlásit jako SPAM
IP: 88.100.200.–
KIIV
~ Moderátor
+43
God of flame
15. 12. 2013   #7
-
0
-

#5 Robo
puvodne tam bylo  int ** arr  (coz bylo spravne) a delete [] arr; byl pak kravina... melo byt delete [] *arr;

jenze jak sem vypichl v jednom prispevku, tak dalsi nesmysl bylo:  void zaplnPole(int *arr, int &a) ...

z nejakeho duvodu autor zlikvidoval to spravne  int **arr a zmenil na int (*arr) - asi aby to mel spatne vsude ci co

#6 Bananovnik
a ty by si mel misto "brutal force evolucniho vyvoje" zkusit obcas promyslet co se v programu zrovna deje

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Robo
~ Anonymní uživatel
82 příspěvků
15. 12. 2013   #8
-
0
-

Napísal som to, ale až potom som si uvedomil že to robím pre pole a nie pre matice :D
ale postup je ten istý aj pre matice, len to zapíšeš tak ako písal KIIV.

 

#include <iostream>
#include <ctime>

using namespace std;

int *zapln_pole(int arr[], int *n, int count);	
int *zvacsi_pole(int arr[], int n, int count);

int main()
{
	srand(time(NULL));
	int a = 0;
	int *arr = new int[a];
	int count;

	cout << "Zadaj pocet prvkov: ";
	cin >> count;
	
	// cyklus bezi pokial nezadas zaporne cislo, stale sa pyta, o kolko chces zvacsit pole
	while(count > 0){
		arr = zapln_pole(arr, &a, count);

		cout << "Zadaj pocet prvkov: ";
		cin >> count;
	}

	// vypis
	for(int i = 0; i < a; i++)
		cout << arr[i] << endl;
	
	delete [] arr;

	system("PAUSE");
}

int *zapln_pole(int arr[], int *n, int count){
	arr = zvacsi_pole(arr, *n, count);	//pole sa zvacsi o count

	// vkladanie nahodnych hodnot
	for(int i = *n; i < *n + count; i++){
		arr[i] = rand() % 100;
	}

	*n += count;						// zvacsenie premennej celkovej dlzky pola
	return arr;							// v maine sa do pola arr vrati adresa noveho arr a delete sa bude stahovat uz ktomuto novemu arr
}

int *zvacsi_pole(int arr[], int n, int count){
	int *arr2 = new int[n + count];	// vytvorenie noveho pola
	
	for(int i = 0; i < n; i++){
			arr2[i] = arr[i];
	}

	delete [] arr;					// zmazanie stareho pola
	return arr2;					// treba vratit adresu noveho pola a priradit ju k nazvu stareho (zmazaneha) pola
}
Nahlásit jako SPAM
IP: 178.253.153.–
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, 116 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ý