c 2d array a free
c 2d array a free
Ako porovnam 2d polia bez toho aby kontroloval kazdy jeden znak v poliach mam na mysli z by skontroloval iba jedno pole nieco take :
char a[100][100];
char b[100][100];
for (i=0;i<=10;i++) {
if (a==b) } // to 2. nemusi
//...
totiz polia mam vynulovane a stale to roby ako keby neboli rovnake pricom su.
A este jedna otazka ako pouzijem "free" v 2d poliach hlasi mi to chybu :
for (x = 0; x < 100; x++)
for (y = 0; y < 100; y++) {
a[x][y]=(char) calloc (0,sizeof(char));
b[x][y]=(char) calloc (0,sizeof(char));
c[x][y]=(char) calloc (0,sizeof(char));
d[x][y]=(char) calloc (0,sizeof(char));
}
//...
for (i = 0; i < 100; i++) {
free(a);
free(b);
free(c);
free(d);
}
char a[100][100];
char b[100][100];
for (i=0;i<=10;i++) {
if (a==b) } // to 2. nemusi
//...
totiz polia mam vynulovane a stale to roby ako keby neboli rovnake pricom su.
A este jedna otazka ako pouzijem "free" v 2d poliach hlasi mi to chybu :
for (x = 0; x < 100; x++)
for (y = 0; y < 100; y++) {
a[x][y]=(char) calloc (0,sizeof(char));
b[x][y]=(char) calloc (0,sizeof(char));
c[x][y]=(char) calloc (0,sizeof(char));
d[x][y]=(char) calloc (0,sizeof(char));
}
//...
for (i = 0; i < 100; i++) {
free(a);
free(b);
free(c);
free(d);
}
Re: c 2d array a free
Ach jaj, no takze takto. Porovnanie a==b porovnava adresy, ktore su vzdy rozne. Ked chces porovnanie po prvkoch, tak to musis porovnat po prvkoch (pripadne, pouzit funkciu ako memcmp). A ten druhy tvoj problem
a[x][y]=(char) calloc (0,sizeof(char)); <- toto je uplne cele zle.
Spravne by si to mal spravit
a[x]=(char*) calloc (0,sizeof(char)*size); kde size je pocet znakov, ktore chces alokovat.
Nicmenej ak mas a definovane takto char a[100][100]; tak ich ani nealokuj ani nefreeuj. Vytvorene uz su rovnako ako sa sami dealokuju.
a[x][y]=(char) calloc (0,sizeof(char)); <- toto je uplne cele zle.
Spravne by si to mal spravit
a[x]=(char*) calloc (0,sizeof(char)*size); kde size je pocet znakov, ktore chces alokovat.
Nicmenej ak mas a definovane takto char a[100][100]; tak ich ani nealokuj ani nefreeuj. Vytvorene uz su rovnako ako sa sami dealokuju.
Re: c 2d array a free
Vdaka o tom memcmp som nevedel a este co sa pise namiesto otaznikov.
n=memcmp (a,b,???????);
n=memcmp (a,b,???????);
Re: c 2d array a free
No memcmp funguje tak, ze mu das jeden usek pamate, druhy usek pamate a velkost (to su tvoje otazniky). Preto ked chces porovnať tie polia a a b, tak das podmienku
if (memcmp(a, b, 100*sizeof(char)) == 0)
{
//tu ide kod, ked su polia a a b rovnake
}
if (memcmp(a, b, 100*sizeof(char)) == 0)
{
//tu ide kod, ked su polia a a b rovnake
}
Re: c 2d array a free
A este mam otazku: memcpy (1.blok pamate, 2.blok pamate, a tu ide co kam to ulozit )?
A ak chem ib jeden blok ulozit tak nieco tak: memcpy (1.blok, kam to presunut ) ?
A ak chem ib jeden blok ulozit tak nieco tak: memcpy (1.blok, kam to presunut ) ?
Re: c 2d array a free
memcpy pracuje podobne ako memcmp. Das mu dve adresy do pamate a velkost.
memcpy(a, b, n) sposobi, ze sa zoberie n bajtov so zaciatkom na adrese a a presunie sa na n bajtov so zaciatkom na adrese b.
memcpy(a, b, n) sposobi, ze sa zoberie n bajtov so zaciatkom na adrese a a presunie sa na n bajtov so zaciatkom na adrese b.
Re: c 2d array a free
Kód: Vybrať všetko
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
int m;
int i;
char **t;
scanf ("%d",&n);
scanf ("%d",&m);
for (i = 0; i < n; i++) {
t[i]= (char*) calloc (0,sizeof(char)*m);
}
free (t);
return 0;
}
Re: c 2d array a free
Samozrejme, ze ti ho nechce vytvorit, lebo t nie je inicialiyovane. Najprv musis dat (pred cyklus) t = (char**) malloc(n * sizeof(char*)).
Re: c 2d array a free
Este stale je tam nieco zle lebo t = NULL. Skusal som to vseliak popisat a stale nic .
Re: c 2d array a free
Hej, uz som si to vsimol, calloc pouzivas zle. Spravne to ma byt t= (char*) calloc (m, sizeof(char));. Cize cele to moze vyzerat takto:
Inak nefreeujes dobre, freeovat musis vsetko co si naalokoval, teda jednotlive t a az potom samotne t.
Kód: Vybrať všetko
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
int m;
int i;
char **t;
scanf ("%d",&n);
scanf ("%d",&m);
t = (char**)malloc(n * sizeof(char*));
for (i = 0; i < n; i++) {
t[i]= (char*) calloc (m, sizeof(char));
}
free (t);
return 0;
}