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

Realloc matice – C / C++ – Fórum – Programujte.comRealloc matice – C / C++ – Fórum – Programujte.com

 

constantine
~ Anonymní uživatel
1 příspěvek
25. 11. 2012   #1
-
0
-

Ahoj, 
chci se zeptat, jak provést realloc paměti pro matici?

Mám program, kde načítám po znacích vstup neznámé délky, všechny řádky jsou stejně dlouhé. Vytvořil jsem si matici, kde vstup ukládám. Problém je, když je vstup delší než matice, jak jí rozšířím?

Mám:

pole[j][k]=(char)c;

	if(k == sloupce) {
                puvsloupce = sloupce;
                sloupce = sloupce *2;
                for (i = 0; i < puvsloupce; i++) {
                    pole[i] = ( char *) realloc( pole[i], sloupce * sizeof(char) );
                    }
                }
        if(j==radky) {
                radky = radky *2;
                pole = ( char **) realloc( pole, radky *sizeof(char*));
                }

Na začátku mám dáno, že sloupce = 100, radky = 100. Pokud je na vstupu víc, potřebuju rozšířit matici. Vážně už nevím, co s tím.

Nahlásit jako SPAM
IP: 94.113.116.–
cibule0
Návštěvník
25. 11. 2012   #2
-
0
-

#1 constantine
Tohle to jsem taky resil a nepovedlo se mi to :-), nakonec jsem to vyresil tak ze jsem realocoval pouze jednorozmerne pole a to jsem potom prevedl na matici :-), ono vlastne muzes i jednorozmerne pole pouzit i jako matici akorat davat bacha na indexovani.

Uvidime co odpovi ostatni treba to jde :-)

Nahlásit jako SPAM
IP: 85.70.207.–
vitamin+8
Grafoman
25. 11. 2012   #3
-
+2
-
Zajímavé

kod moze vyzerat takto:

typedef struct{
	size_t 	riadky; 
	size_t 	stlpce;
	int** 	data;
}matrix_t;

matrix_t new_matrix(size_t riadky, size_t stlpce){
	/*
	 * alokuje maticu
	 */
}
void delete_matrix(matrix_t m){
	/*
	 * dealokuje maticu
	 */
}

matrix_t resize_matrix(matrix_t m, size_t add_riadky, size_t add_stlpce){
	size_t new_stlpce = m.stlpce + add_stlpce;
	size_t new_riadky = m.riadky + add_riadky;
	
	if(add_stlpce){
		m.stlpce = new_stlpce;
		for(size_t i = 0; i < m.riadky; ++i)m.data[i] = (int*)realloc(m.data[i], sizeof(int)*new_stlpce);
	}
	else m.stlpce = new_stlpce;
	
	if(new_riadky > m.riadky){
		m.data = (int**)realloc(m.data, sizeof(int*)*new_riadky);
		for(size_t i = m.riadky; i < new_riadky; ++i)m.data[i] = (int*)malloc(sizeof(int)*m.stlpce);
		m.riadky = new_riadky;
	}
	else m.stlpce = new_stlpce;
	
	return m;
}
	
void print_matrix(matrix_t m){
	/*
	 * vypise maticu
	 */	
}	
int main(){
	matrix_t m = new_matrix(1, 1);

	m.data[0][0] = 6;
	
	print_matrix(m);
	
	m = resize_matrix(m, +2, +1);	//prida 2 riadky a 1 stlpec
	m.data[0][1] = 1;
	m.data[1][0] = 2;
	m.data[1][1] = 3;
	m.data[2][0] = 4;
	m.data[2][1] = 5;
	print_matrix(m);

	delete_matrix(m);

}
Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
vitamin+8
Grafoman
26. 11. 2012   #4
-
0
-

#3
tie else tam vobec nemusia byt (ten druhy je aj tak "chybny", nastastie je neskodny   )

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
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, 131 hostů

Podobná vlákna

Realloc — založil Martin

Realloc() — založil Kuba-$

Realloc — založil oxidián

Realloc a NULL — založil olgo

Proč padá funkce po realloc? — založil oxidián

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ý