Diskuze: Naplnění 2d dynamického pole hodnotama C
Zobrazeno 6 zpráv z 6.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Ahoj, mas tam chybu v pretypovani u alokace pameti pro jednotlive sloupce a taky mas chybu v dealokaci pameti - dealokujes pouze pamet pro radky a pro sloupce ne. Takhle by to melo byt spravne:
#include <stdio.h>
#include <stdlib.h>
int AlokacePameti(int*** pole, int radky, int sloupce);
int main ()
{
int i;
int j;
int ** pole;
int radky;
int sloupce;
printf("Zadej pocet radku matice A: ");
scanf("%d", &radky);
printf("\nZadej pocet sloupcu matice A: ");
scanf("%d", &sloupce);
AlokacePameti(&pole, radky, sloupce);
printf("Zadejte hodnoty v matici: \n");
for (i = 0; i < radky; i++)
{
for (j = 0; j < sloupce; j++)
{
scanf("%d", &pole[i][j]);
}
}
printf("Matice A je: %d * %d\n", radky, sloupce);
for(i = 0; i<radky; i++)
{
for(j = 0; j < sloupce; j++)
printf("%d ", pole[i][j]);
printf("\n");
}
for (i = 0; i < radky; i++) {
free(pole[i]);
}
free(pole); //every c/malloc need a free
return 0;
}
int AlokacePameti(int *** pole, int radky, int sloupce){
int i;
*pole = (int**)malloc( sizeof(int *) * radky);
if (*pole == NULL){
printf("ERROR: out of memory\n");
return 1;
}
for (i=0;i<radky;i++){
(*pole)[i] = (int*)malloc( sizeof(int) * sloupce);
if ((*pole)[i] == NULL){
printf("ERROR: out of memory\n");
return 1;
}
}
printf("Allocated!\n");
return 0;
}
1 ) Používej code (viz obrázek)
2 ) alokace a dealokace (viz Artas)
3 )
AlokacePameti(&pole, radky, sloupce);
Proč posíláš další pointer? Není lepší to poslat přímo?
Když to pošle přímo, tak jakoukoliv paměť přiřadí tomu pointeru v parametru a ten pointer který je deklarován v main se nezmění a bude pořád ukazovat na nějakou "náhodnou" adresu.
Aj :[ , já na vrácení hodnoty používám return, tak nějak jsem si to neuvědomil.
Zobrazeno 6 zpráv z 6.