pekfos |
» 2018-05-15 23:04:22 To nie odpowiada na żadne z tych dwóch pytań. To że ten kod działa tam bez dodatkowego wskaźnika, poddaje w wątpliwość, że chodzi tu o język C. Edytor tekstowy nie ma tu nic do rzeczy. |
|
desperat96 Temat założony przez niniejszego użytkownika |
» 2018-05-15 23:09:46 Jaki kompilator tam jest to dokładnie nie wiem, a na pytanie jak kompiluję nie potrafię odpowiedzieć, naciskam kompiluj i kompiluje. |
|
jankowalski25 |
» 2018-05-15 23:12:25 wskaźnik jest przekazywany przez referencję |
Nie jest, domyślnie wszystko ląduje na stos i jest przekazywane przez wartość (zwłaszcza w C, gdzie referencje nie istnieją). Jeśli chcesz, aby był, to należy użyć typ *& , ale to już nie jest C, tylko C++. Chyba że robisz jakieś czary z rzutowaniami na void * (wtedy zawsze wystarczy jedna gwiazdka), ale to by było nierozsądne... Dopisano:Hmm... a nie zwracasz przypadkiem z funkcji zmodyfikowanego wskaźnika? W sumie to lepiej podaj kod, może są jakieś istotne różnice, które nie padły w temacie. |
|
desperat96 Temat założony przez niniejszego użytkownika |
» 2018-05-15 23:21:44 Kod #include <stdlib.h> #include <stdio.h> void red( int ** ); int main() { int * wsk, i; wsk =( int * ) malloc( 15 * sizeof( int ) ); for( i = 0; i < 15; i++ ) { wsk[ i ] = i + 100; printf( "%d numer wskaznika:%p \n", wsk[ i ], wsk + i ); } printf( "\n\n" ); red( & wsk ); printf( "\n\n" ); for( i = 0; i < 20; i++ ) { printf( "%d numer wskaznika:%p \n", wsk[ i ], wsk + i ); } free( wsk ); return 0; } void red( int ** wskaznik ) { * wskaznik = realloc( * wskaznik, 20 * sizeof( int ) ); }
Znaczy robiłem wszystko tak, no i prowadzący powiedział żebym tak nie robił, pokazał jak robić na komputerze uczelnianym(czyli bez dodatkowego wskaźnika), tam zadziałało, a u mnie nie działa bez dodatkowego wskaźnika. |
|
pekfos |
» 2018-05-15 23:28:56 |
|
desperat96 Temat założony przez niniejszego użytkownika |
» 2018-05-15 23:33:42 mingw32-gcc.exe -c C:\Users\Kamil\Desktop\C\testy.c -o C:\Users\Kamil\Desktop\C\testy.o mingw32-g++.exe -o C:\Users\Kamil\Desktop\C\testy.exe C:\Users\Kamil\Desktop\C\testy.o Process terminated with status 0 (0 minute(s), 0 second(s)) 0 error(s), 0 warning(s) (0 minute(s), 0 second(s))
Znaczy ja chyba mam podejrzenia czemu się tak dzieje, u mnie każdy realloc zmnienia adres, a na uczelni z tego co zauważyłem adresy się nie zmieniaja(jakby dac odpowiednio długi to pewnie by sie zmieni), dlatego potem w mainie wszystko działa. |
|
pekfos |
» 2018-05-15 23:49:57 realloc() nie musi dokonać realokacji, więc może być tak jak piszesz. Zachowanie może się różnić między systemami. Zażądanie odpowiednio większej ilości pamięci powinno wywołać zmianę adresu i najlepiej taki przypadek pokaż prowadzącemu. Bo ten wskaźnik jest tu konieczny. |
|
desperat96 Temat założony przez niniejszego użytkownika |
» 2018-05-15 23:58:39 Dobra, dzięki wielkie, kolega którego system zachowywał się podobnie jak uczelniany sprawdził i gdy bez wskaźnika do wskaźnika powiększył z 15 do 2000 reallociem w funckci, to mu się wywaliło i stracił w mainie wskaźnik do nowego obszaru, a z wskaźnikiem do wskaźnika wszystko działa. Dzięki wielkie jeszcze raz. |
|
1 « 2 » |