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

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

 

Příspěvky odeslané z IP adresy 2001:718:1001:693:f2de:f1...–

kilroy
C / C++ › Realokace paměti
29. 10. 2013   #182970

A je tohle správně:  

char **pointer;
	*pointer=array;
	reallocArray(pointer,&arraySize);
	array=*pointer;

nebo to má vypadat takhle:  

	char **pointer;
	char *pointer2;
	*pointer=pointer2;
	reallocArray(pointer,&arraySize);
	array=*pointer;
kilroy
C / C++ › Realokace paměti
29. 10. 2013   #182967

#17 KIIV
Jasné, vlastně ani v té verzi, která vrací hodnotu není v mainu uvolnění... To ale teďka neřeším, jde mi pouze o to, jestli jsem konečně ty zatracené ukazatele pochopil :)

kilroy
C / C++ › Realokace paměti
29. 10. 2013   #182965

#15 hlucheucho
ještě, jestli můžu otravovat, tak verze s parametrem bude vypadat takhle, že? 

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

void reallocArray( char **pointer,unsigned int *arraySize)
{
	*arraySize+=200;
	char *newArray=(char *)malloc((*arraySize+1)*sizeof(char));
	strcpy(newArray,*pointer);
	*pointer=newArray;
}

int main() 
{
	unsigned int arraySize=10;
	char *array=(char *)malloc((arraySize+1)*sizeof(char));


	char **pointer;
	*pointer=array;
	reallocArray(pointer,&arraySize);
	array=*pointer;


	array[10]='0';
	return 0;
}
kilroy
C / C++ › Realokace paměti
29. 10. 2013   #182963

#13 KIIV
 Super, už to nejspíš chápu a tohle je konečně funkční... :D Díky moc všem za rady

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

char* reallocArray(char *x,unsigned int *arraySize)
{
	*arraySize+=200;
	char *newArray=(char *)malloc((*arraySize+1)*sizeof(char));
	strcpy(newArray,x);
	free(x);
	return newArray;
}

int main() 
{
	unsigned int arraySize=1;
	char *array=(char *)malloc((arraySize+1)*sizeof(char));

	array=reallocArray(array,&arraySize);
	array[10]='0';
	return 0;
}
kilroy
C / C++ › Realokace paměti
29. 10. 2013   #182960

#10 hlucheucho
tak jsem si myslel, že už chápu docela ukazatele, ale ne :D

kilroy
C / C++ › Realokace paměti
29. 10. 2013   #182959

#9 KIIV

A jo, máš pravdu..

0xd21010  adresa x před zavoláním funkce..
0xd21030  adresa nového pole
0xd21030 adresa x při přeřazení
0xd21010 adresa x po skončení funkce

Takže, abych změnil adresu pole, musí funkce vracet pointer na nově vytvořené pole, že?

kilroy
C / C++ › Realokace paměti
29. 10. 2013   #182956

#7 KIIV
pardon, poslal jsem špatný kód.. Už si s tím hraji tak dlouho, že ani nevnímám :D  

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

void Realloc(char *x,unsigned int *arraySize)
{
	*arraySize+=200;
	char *newArray=(char *)malloc((*arraySize+1)*sizeof(char));
	strcpy(newArray,x);
	char * temp=x;
	x=newArray;
	newArray=temp;
	free(newArray);
}

int main() 
{
	unsigned int arraySize=1;
	char *array=(char *)malloc(arraySize*sizeof(char));

	Realloc(array,&arraySize);
	array[10]='0';
	return 0;
}

Tohle by snad mělo být správně...

kilroy
C / C++ › Realokace paměti
29. 10. 2013   #182952

#5 KIIV
jasné, už jsem to upravil..

void Realloc(char *x,unsigned int *newArraySize)
{
	*newArraySize+=200;
	char *newArray=(char *)malloc(*newArraySize+1)*ziseof(char));
	strcpy(newArray,x);
	int temp=x;
	x=newArray;
	newArray=temp;
	free(newArray);
}

Ještě mi trochu dělají problém ukazatele a zapomněl jsem, že k přepointerování nesmím dát hvězdu.. Jinak díky za odpovědi

kilroy
C / C++ › Realokace paměti
29. 10. 2013   #182942

#1 kilroy
Pardon, místo int temp=*newArray; má být int temp=*x; Ale stejně mi to nefunguje...

kilroy
C / C++ › Realokace paměti
29. 10. 2013   #182941

 Dobrý den, vytvořil jsem si v C funkci pro realokaci pole:

void reallocArray(char *x,unsigned int *arraySize)
{
	unsigned int oldArraySize=*arraySize;
	*arraySize+=200;

	char *newArray=(char *)malloc(((*arraySize)+1)*sizeof(char));

	for (i=0;i<=oldArraySize;++i)
	{
		newArray[i]=x[i];
	}

	int temp=*newArray;
	*x=*newArray;
	*newArray=temp;
	free(newArray);

}

Ale nějak mi s ní program nefunguje. Nevíte, kde by mohla být chyba? Díky za odpovědi

kilroy
C / C++ › getwchar
18. 10. 2013   #182557

Dobrý den, chtěl jsem se zeptat, z jakého důvodu se, když mám následující kód

char a;
int b;

a=getwchar();
cin >> b;
cin >> b;
cin >> b;

provede čtení z vstupu pouze pomocí getwchar() a následující cin jsou přeskočeny? Děkuji za odpovědi

 

 

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