

![]() |
![]() |
|
|||||||
![]() |
![]() |
| programowanie języki, projekty, pomoc, oprócz html, php, js |
|
|
|
LinkBack | Narzędzia wątku | Przeszukaj ten temat | Wygląd |
![]() |
![]() |
|
|||
|
witam. chcialbym przydzielic dynamicznie (przez calloc lub malloc) pamiec dla tablicy 2-wymiarowej. dodam ze wszystko jest czescia juz istniejacego programu podzielonego na pliki (moze to ma znaczenie dla mojego problemu).
w pliku main.h: Kod:
... extern float ** Distance; ... Kod:
float ** Distance; Kod:
#include "main.h"
...
function przyklad () {
...
Distance = (float **) calloc( numOfLines, sizeof(float *) );
for ( i = 0; i < numOfLines; i++ )
Distance[i] = (float *) calloc( numOfLines, sizeof(float) );
...
}
...
zmienna float ** Distance umyslnie zrobilem jako globalna zeby nie stracic wartosci w niej przechowywanej ale domyslam sie ze pamiec przydzielana do jej "podwskaznikow" jest niestety zwalniana. pytanie: jak zrobic zeby moc przydzielic pamiec tak jak bym tego chcial (czyli w funkcji main() moge operowac na Distance jak na normalnej tablicy 2-wymiarowej)? |
![]() |
![]() |
![]() |
![]() |
|
|||
|
Witam,
Unit1.cpp Kod:
#include <stdio.h> int** tab = NULL; Kod:
#include <stdio.h>
#include <stdlib.h>
#include "Unit1.cpp"
extern int** tab;
void przyklad(int rows, int columns);
int main(void)
{
int rows = 6;
int columns = 4;
przyklad(rows, columns);
for (int i = 0, counter = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
tab[i][j] = counter++; // umieszczenie kolejnych liczb w komorkach tab
printf("[%d,%d] = %2d ", i, j, tab[i][j]); // wyswietlenie zawartosci tab
}
printf("\n");
}
// zwolnienie pamieci
for (int i = 0; i < rows; i++) {
free(tab[i]);
}
free(tab);
tab = NULL;
return 0;
}
void przyklad(int rows, int columns)
{
tab = (int**) calloc(rows, sizeof(int*));
for (int i = 0; i < rows; i++) {
tab[i] = (int*) calloc(columns, sizeof(int));
}
}
Może w funkcji przyklad() masz jakąś zmienną lokalną float** Distance, która przysłania Ci zmienną globalną? Spróbuj z globalnym kwalifikatorem zakresu dostępu przy odnoszeniu się do Distance. Musisz zagwarantować, że funkcja przyklad() zostanie wywołana zanim zaczniesz operować na tablicy Distance. pozdrawiam, qbrs.
__________________
upload dla PEB: ~25GB *POLECAM* [RS] Carnivale, czyli "post Twin Peaks". Najczęściej pobierane: [RS] Spun, [RS] The Dreamers (Marzyciele), [RS] The Usual Suspects (Podejrzani) [1995]. |
![]() |
![]() |
![]() |
![]() |
|
|||
|
witam. wszystko sie juz wyjasnilo... i problem znalazlem zupelnie gdzie indziej niz gdzie go szukalem. okazalo sie ze nie wyzerowalem jednej malej zmiennej "i" a pozniej juz inny wskaznik opierajac sie o przesuniecie "i" nadpisywal mi czesc danych zawartych w dynamicznej pamieci tablicy Distance... a ze nowe dane pojawily sie w miejscu gdzie byly wskazniki to zostaly one pozniej odczytane jako adresy a stad juz krotka droga do "Segmentation fault" albo "Naruszenie ochrony pamieci"
@ qbrs, dzieki za poswiecony czas nad problemem. |
![]() |
![]() |
|
| Narzędzia wątku | Przeszukaj ten temat |
| Wygląd | |
|
|
Podobne wątki
|
||||
| Temat | Autor wątku | Forum | Odpowiedzi | Ostatni post/autor |
| [C++] dynamiczna tablica wskaźników (program) | Elka | programowanie | 5 | 08.12.2010 21:36 |
| [C++] Dynamiczna tablica dwuwymiarowa | damiano1511 | programowanie | 14 | 17.09.2008 10:22 |
| [RS]DSJ 2.1 Stare czasy :) | robben16 | sportowe, wyścigowe | 3 | 03.03.2008 16:24 |
| --- uszkodzony wentylator od geforce3 ti, brak oznak zycia --- | zask | sprzęt | 2 | 15.02.2006 19:46 |
| Wszystkie czasy w strefie GMT +2. Teraz jest 08:23. |

