Mam jeden mensi problem. Mam program a v nom trojrozmerne pole o velkosti 10*9*9, lezne spustim program a hned sa mi napise has stoped working.. Ale ked velkost zmenim na 7*6*6 tak vsetko ide v poriadku, ale ked zvysim velkost o 1 na 8*7*7, tak zas vznika rovnaky problem.
Teraz som z toho magor. Lebo neviem ci sa neda alkovat pamat pre taketo pole, alebo maximalne moze byt len 7*7*7 pole. Budem rad za kazde objasnenie/ vysvetlenie.
Fórum › C / C++
Trojrozmerne pole - problem s velkostou
vazne to nejde aj cez staticke? Dynamicke trojrozmerne sa zle robi, zvladnem mozno tak dvojrozmerne, ale trojrozmerne je pre mna moc (som newbie). Neviem ani ci ho dobre alokujem a uz vobec neviem ci ho dobre definujem a spravne volam vo funkciach.
moze byt taketo alokovanie?
int ***alokuj(int riadky, int hlbka, int stlpce)
{
int ***p, i, j;
p = (int ***) malloc(riadky * sizeof(int **));
for(i=0; i<riadky; i++){
p[i] = (int **) malloc(stlpce * sizeof(int *));
for (j=0; j<hlbka; j++){
p[i][j] = (int *) malloc(hlbka * sizeof(int));
}
}
return p;
}
a takto ho mam definovat v main?
int ***pole;
a takto volat vo funkcii?
nacitaj (pole[N+1][N][N], fr);
no tak teraz som zistil, ze chyba nebude, v poli, ale skor v jednej z funkcii, ale vazne neviem co moze byt tym problemom
#include <stdio.h>
#include <stdlib.h>
#define N 9
void vypis (int pole[N+1][N][N])
{
int i,j,n;
for (n=1; n<=N; n++){
for(j=1; j<=N+1; j++){
for (i=1; i<=N; i++){
printf ("%d ", pole[j-1][i-1][n-1]);
}
putchar ('\n');
}
putchar('\n');
}
}
int riadok (int pole[N+1][N][N])
{
int i,j,k,n;
for (n=1; n<=N; n++){
for (i=1; i<=N; i++){
for (j=1; j<=N; j++){
for (k=1; k<=N; k++){
if ((pole[j][i-1][n-1])==(pole[0][k-1][n-1])){
(pole[j][i-1][n-1]=0);
}
}
}
}
}
return pole [N+1][N][N];
}
int stlpec (int pole[N+1][N][N])
{
int i,j,k,n;
for (n=1; n<=N; n++){
for (i=1; i<=N; i++){
for (j=1; j<=N; j++){
for (k=1; k<=N; k++){
if ((pole[j][i-1][n-1])==(pole[0][i-1][k-1])){
(pole[j][i-1][n-1]=0);
}
}
}
}
}
return pole [N+1][N][N];
}
int moznosti(int pole[N+1][N][N])
{
int i,j,n;
for (n=1; n<=N; n++){
for (i=1; i<=N; i++){
for (j=1; j<=(N); j++){
if (pole[0][i-1][n-1]==0){
pole[j][i-1][n-1]=j;
}
else{
pole[j][i-1][n-1]=0;
}
}
}
}
return pole[N+1][N][N];
}
int main()
{
FILE *fr;
fr = fopen("CISLA.TXT", "r");
int pole[N+1][N][N];
int i,n;
for (n=1; n<=N; n++){
for (i=1; i<=N; i++){
fscanf(fr,"%d", &pole[0][i-1][n-1]);
}
}
pole[N+1][N][N] = moznosti (pole);
pole[N+1][N][N] = riadok (pole);
pole[N+1][N][N] = stlpec (pole);
vypis(pole);
fclose(fr);
//free ((void*) *pole);
return 0;
}
int ***alokuj(int riadky, int hlbka, int stlpce)
{
int ***p, i, j;
p = (int ***) malloc(riadky * sizeof(int **));
for(i=0; i<riadky; i++){
p[i] = (int **) malloc(stlpce * sizeof(int *));
for (j=0; j<stlpce; j++){
p[i][j] = (int *) malloc(hlbka * sizeof(int));
}
}
return p;
}
ma to byt takto, a bude to pole p[riadky][stlpce][hlbka], cize nie ako si to zrejme myslel...To Smurffy : zkousel jsem ten zdrojovy kod a fungoval mi bez problemu... teda nezkoumal jsem, co presne ma ten program delat, ale po kompilaci probehl az do konce. Testoval jsem to ve VS 2005 na testovacich datech cisla od 1 do 81 vzestupne.
Co pouzivas za kompilator? Jaka mas vstupni data?
Jinak muzes zkusit pouzit jen jednorozmerne pole a index si prepocitavat (pokud se Ti nelibi tri rozmery).
Pokud si skutecne myslis, ze je chyba v nejake funkci tak postupne vypinej kusy kodu pomoci komentaru, dokud nenaleznes misto, ktere dela problem.
dik vsetkym za help. Tak som sa s tym sral a nakoniec ma troska trklo co napisal _k_ a zmenil som volanie funkcie a na
***pole = moznosti (pole);
a ide to. Kazdopadne nechapem, preco mi to aj pri predoslej definicii strajkovalo
NIckJartin: tiez pouzivam MS VS 2005 express, ale vyhadadzovalo mi to pri n>6 daky bug(nevystvetlitelny problem s volanim funkcie :) ) Kazdopadne teraz ide ok
hehe a teraz som zistil, ze sa mi tymto sposobom dosere prve cislo :O
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Trojrozměrné pole a indexace — založil vollf82
Odebrání prvku pole v C,problem s vypisem pole — založil Standa
Problém s indexem pole — založil Sprinter
C [pole] - problém/pomoc — založil pulsik
Problém s inicializováním multidimensionálního pole — založil nemeja
Moderátoři diskuze