Ponieważ wskaźnik na tab[ww][kk] jest nieokreślony. [syntax=c]Matrix(int _w, int _k) : w(_w), k(_k) { int **tab = new int *[w]; for (size_t i = 0; i < w; i++) { tab[i] = new int [k]; // +++++++++++++++++ for (size_t j = 0; j < k; k++) { tab[i][j] = 0; } // +++++++++++++++++ } ObjectCount++; }[/syntax] [syntax=c]#include <iostream> class...
Teraz pozostało mi przenieść projekt z stm32 na lm3s, ponieważ zajmuję się tym w wolnym czasie od pracy, to efektem podzielę się pewnie za kilka dni. To naprawdę nie jest dużo roboty, generalnie (pomijając detale typu zmiana nazw plików czy nazwy projektu) trzeba zrobić mniej więcej "aż" tyle: 1. poprawić tablicę wektorów (to i tak byś miał kiedyś...
w wielu jezykach programista jest zwolniony z tego zmartwienia przez standardowe biblioteki. podejrzewam, ze wlasnie jakies rozwiazanie podobne do przedstawionego przez Ciebie jest stosowane do rozwiazania tego problemu. jedyna optymalizacja, jaka mi przychodzi teraz do glowy, to dynamiczna modyfikacja rozmiaru "kesow". Np: kazdy nastepny "kes" dodawany...
Dla dynamicznej alokacji pamięci ilość pamięci w systemie nie ma większego znaczenia. Nie ma granicy powyżej której ma ona sens, a poniżej już nie. Wszystko zależy od zastosowań. Tu kolega alokuje niewielkie ilości pamięci i być może ma to sens. IMHO dynamiczna alokacja pamięci jest demonizowana - jeśli wszystko robi się jak należy to jest to tak samo...
jeżeli masz listę jednokierunkową, to najpierw musisz odnaleźć element poprzedzający ten, który musisz usunąć. Resztę masz opisaną tu: http://www.elektroda.pl/rtvforum/topic90...
Wyłącz antywirusa i sprawdź czy tak samo laguje. Jeżeli program uruchamiasz pod Windowsem, to miej na uwadze że Windows pedantycznie troszczy się o ilość wolnej pamięci, alokując ją na dysku, zamiast w ram'ie, choć wolnego ramu jest jeszcze od groma. Jeżeli masz conajmniej 1GB ramu (dobra granica dla XP), to wyłączenie "pliku wymiany" na wszystkich...
Co do powyższego to owszem, wskaźnik to po prostu komórka pamięci przechowująca adres do innej komórki, gdy dokonamy inkrementacji (++) lub dekrementacji (--) zmienimy zawartość wskaźnika, adres wskaźnika jest nadal ten sam. [syntax=c]int a[]={1, 2, 3}; int *b=&a; &a -operator adresu do zmiennej a ------------------------------------ Pamięć [0x00|0x01|0x02|0x03|0x04]...
W zasadzie tak nie należy robić. Dwie gwiazdki obok siebie to już jest podejrzane, a le trzy.... ;) Ale jeżeli chodzi tylko o gimnastykę z językiem C, to trzeba to zrobić tak: Dodano po 28 Tak, taka jest składania. Zmienna tablica wewnątrz funkcji funkcja() jest wskaźnikiem na zmienną tablica z funkcji main() . Trochę mylące jest użycie tej samej nazwy...
Bo wogóle pierwszy malloc nie może brać rozmiaru 6*sizeof(int) ale 6*sizeof(struct bazadanych *)
Witam! A'propos "przytyku" Wszystko zawarłem w pierwszej odpowiedzi. Koledzy chyba posto-nabijacze ? A to fragment cytowanej, Twojej pierwszej odpowiedzi: 1. Pobierasz rozmiar tablicy przy użyciu scanf("%d", &rozmiar) zmienna rozmiar jest typu całkowitego. Skoro pobiera się rozmiar tablicy przy pomocy funkcji scanf od razu zakładam, że rozmiar tablicy...
Chodzi mi jak na stm zaimplementowałeś/skad wziales funkcje malloc/free.
Której linii dotyczy komunikat? Coś mi się zdaje, że zamiast jeden.(*dane)=1; powinno być *jeden.dane=1;
If addr is NULL, then the kernel chooses the address at which to create the mapping; Wystarczy czytać...
Poza stosem w SRAMie masz jeszcze przynajmniej: - stertę - dynamiczna alokacja (malloc, new) - sekcję data - wszelkie globalne i statyczne zmienne inicjowane jakąś wartością - sekcję bss - jw. ale zerowane przy starcie programu poza tym możesz sobie tworzyć własne sekcje, latać wskaźnikiem po pamięci i cokolwiek Ci przyjdzie do głowy. Alokowanie dużej...
Tak, dobrze to pokazałeś. Najłatwiej sobie rozkminiać takie problemy w symulatorze. Masz na wszystko podgląd. Dodano po 3 Moim prywatnym zdaniem jednak używanie dynamicznej alokacji pamięci w uC, który tej pamięci ma pojedyncze KiB, jest pozbawione jakiegokolwiek sensu i jest proszeniem się o błędy. A jakie znaczenie ma ilość dostępnej pamięci? Jeśli...
1. Czemu deklarujesz tablicę n-elementową, a potem podajesz elementy od indeksu 1 (drugiego) elementu? 2. Czemu przypisujesz na dzień dobry do max wartość pierwszego elementu dopiero co utworzonej tablicy? 3. Czemu max masz w typie int, a tablicę w double i teraz porównujesz i przypisujesz miedzy tymi typami?
ale czy znajdziesz biblioteke z malloc dla avr?? jakos mi sie wydawalo zawsze, ze avr nie udostepniaja opcji dynamicznej alokacji pamieci... a sama alokacja, to bedzie np cos takiego... int rows = 6, cols = 5; double **a; a = malloc (rows * sizeof (double *)); if(!a) abort(); for (i = 0; i < rows; i++) {...
Witam Mam problem z programem, ponieważ, nie mam pojęcia dlaczego się wysypuje, wszystko wygląda ok. Na razie program ma stworzyć 2 tablice, jedną z nich wyzerować i wyświetlić. Stosowałem calloc, ale też się program wysypuje. Proszę o pomoc Pozdrawiam [syntax=c]#include<stdio.h> #include<stdlib.h> #define SIZE_X 80 #define SIZE_Y 22 void...
Nie rozumiem Twojego problemu, albo używasz klasyczny tablic dynamicznych i dostępu element=tablica[i][j], albo używasz jak w tym przykładzie wzorca vector i korzystasz z dokumentacji do niego.
Czy na pewno potrzebna jest ci dynamiczna alokacja pamięci? Rozważ poniższy przykład: [syntax=c]#include <stdio.h> int TABLICA[10][4]; void copy_tab(int dst[], int src[], int size) { for (int i = 0; i < size; i++) dst[i] = src[i]; } int main() { int TAB[4] = { 1, 2, 3, 4 }; copy_tab(TABLICA[3], TAB, 4); for (int i = 0; i < 4; i++) printf("TABLICA[3][%d]...
Mam problem z dynamicznym zaalokowaniem pamięci dla tablicy struktur, przy użyciu malloc. Próbowałem na kilka sposobów, ale najczęsciej kompilator wywala błąd "variable sized object may not be initialized". [syntax=c]#include <stdio.h> #include <stdlib.h> #include <time.h> struct Punkt{ float x; float y; }srodkowy; float random01(){...
Witam. Chce zadeklarowac sobie tablice 2-wymiarową, dla ktorej znam tylko jeden wymiar na początku programu. Logiczne wiec, że skorzystam z operatora new. Oto mój kod: char **tablica; for(i=0; i < zmienna; i++) { tablica[i] = new char[3]; } Program kompiluje się poprawnie, ale potem po wywołaniu - zawiesza się. Uzywam...
witam, MAm przygotować aplikację z danej tematyki: 1.Podstawowe elementy języka – zmienne i ich typy, operatory, instrukcje sterujące, pętle, funkcje, tablice. 2.Tworzenie typów złożonych –struktury, unie, tablice struktur, wyliczenia. 3.Przetwarzanie strumieniowe – operacje na plikach tekstowych 4.Przetwarzanie strumieniowe –...
Alokowanie pamięci na stercie ma tę zaletę, że możesz tę pamięć potem zwolnić, ale alokacja trochę kosztuje. Jeśli masz zamiar zaalokować pamięć i nigdy jej nie dealokować to lepiej nie kombinuj tylko zadeklaruj ją "normalnie". Jeśli zacznie Ci brakować pamięci tzn, że źle napisałeś program :)
Nie ma takiej zależności. Jeśli nie korzystasz z dynamicznej alokacji pamięci to możesz to bardzo zgrubnie oszacować po ilości zmiennych automatycznych (lokalnych), a szczególnie tablic. To co czyni takie oszacowanie szczególnie trudnym to określenie stopnia zagnieżdżenia funkcji - bo to zajmuje sporo pamięci na stosie. A zależy to od ilości przerwań,...
Witam , mam problem z przekształceniem programu aby tablice byly utworzone w pamieci dynamicznej. Jak ktos mial by jaks pomysl albo podpowiedział co i jak bede wdzięczny. (program prosty ma dodawać dwie macierze do siebie) [syntax=csharp] #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int tab1[0][0]; int tab2[0][0];...
Witam Mam problem z programem, który tworzy bazę danych. Wkleję tylko kawałek programu, z którym mam problem. Funkcja ma dynamicznie tworzyć, wpisy do bazy danych. Kompilator wyrzuca mi " 'return' : 'baza *' differs in levels of indirection from 'int' ". Bardzo proszę o pomoc. [syntax=c]struct baza{ char imie[30]; char nazwisko[30]; int numer; }; int...
A możecie mi jeszcze powiedzieć jak ustawić: HeapSize, CSTACK i RSTACK, bo coś chyba zamieszałem i mi się zawiesza KIT?? Nie ma na to prostej odpowiedzi. CSTACK to w zależności od tego ile najwięcej zmiennych lokalnych musi być przechowywana naraz. Zdaje sie że też wchodzą do niego zmienne typu STATIC i tym podobne. RSTACK służy do przechowywania adresów...
Zgadza się :) To jest alokacja dynamiczna pamięci dla tablicy indices, ale na stosie, tzw. VLA. O ile pamiętam, napisane było też, aby stosować to do tablic o małym łącznym rozmiarze ;)
witam, Mam mały problem do rozwiązania. Z wejścia czytam dowolnie dużą ilość łańcuchów znaków, każdy dowolnie długi. Może się zdarzyć że np. będą 2 łańcuchy nie dłuższe niż 10 znaków, a może się zdażyć że będzie np. 20 łancuchów po 20 znaków (hipotetycznie). Myślałem żeby rozwiązać to na wskaźnikach i dynamicznej alokacji pamięci, np. tak jak poniżej....
Heh znowu mnie ktos ubiegl a tak ladnie sie rozpisywalem :P
Witam, mam napisany dosc prosty program - baze danych :) Zrobiona na tablicach i ograniczona const int MAX=256; Problem pojawia sie gdy chce zniesc to ograniczenie poslugujac sie w cpp new/delete poczatek programu glownego void main(void) { int i, z=0; char temp[MAX]; // zerowanie tablic for (i=0; i<MAX; i++) { imie[i][0]...
Rozbudowuję moją aplikację o dynamiczną alokacje pamięci - prosty stos FIFO. fifo.c Warning implicit declaration of function 'push' - jak to interpretować? kompilator myśli, że deklaruje po raz kolejny funkcje push? Na tym etapie z warningami, stos FIFO działa poprawnie. Kiedy próbuję dodać na początek pliku main.c , bibliotekę fifo.h , zaraz otrzymuje...
Profilaktycznie zwiększyłem rozmiary stosów do 4096B i zapomniałem sprawdzić ponownie zużycie RAMu. Jeśli nie używasz przerwań (a pewnie na razie nie używasz), to na prawdę rozmiar innych stosów niż user_system może być równy zero. Jeśli zaś używasz, to 4kB na stos przerwań również jest przesadą - przecież to zwykle jedna, krótka funkcja. Może w porywach...
[syntax=c] #include<stdio.h> #include<stdlib.h> int *funkcja(int wiersze, int kolumny); void wypisz(int *tab, int wiersze, int kolumny); int main(void){ int *tab = funkcja(4,6); wypisz(tab,4,6); return 0; } int *funkcja(int wiersze, int kolumny){ int *p = (int)malloc(wiersze*kolumny*sizeof(int))... int i ,j ; int indeks; for(j = 0; j< kolumny;j++){...
Witam. Mam wykonać polecenie: 'Stworzyć strukturę zawierającą dynamicznie zaalokowaną tablicę dwuwymiarową i jej wymiary. Tablica dwuwymiarowa jest reprezentowana przez odpowiedni wskaźnik.' Oprócz tego jeszcze zwolnić zaalokowaną pamięć. Oto co napisałem.. byłbym wdzięczny gdyby ktoś sprawdził czy dobrze to zrobiłem i ewentualnie pokazał mi błąd. #include...
Mała podpowiedź: nie przypisałeś niczego do Solution::Matrix, a próbujesz się do niej odwoływać w ShowSolution, ba, w destruktorze próbujesz ją kasować. ;-) –––– Swoją drogą: aby znajdywać takie błędy polecam statyczne analizatory kodu: [url=http://css.csail.mit.edu/stack/]STA... i [url=http://cppcheck.sourceforge.net/]cp...
Przenalizuj sobie ten kod. Staraj się stosować podobne formatowanie kodu - zwiększa czytelność. [syntax=c]#include<stdio.h> #include<stdlib.h> int main(void) { int n,i,j; int **tab = NULL; printf("%s", "Podaj liczbe wierszy : "); scanf("%d",&n); tab = (int**) malloc(n * sizeof(int*)); for(i = 0; i < n; i++) { tab[i] = (int*) malloc(sizeof(int)...
Jak sam zauważyłeś, dynamiczna alokacja pamięci nie ma sensu we włącznikach światła i sterownikach windy. Nie będzie też miała sensu w zdalnym pilocie do bramy i w czajniku. Za to w systemie który jest podłączony do ethernetu i przyjmuje tyle połączeń na ile pozwoli mu dostępna aktualnie pamięć - czemu by nie? W sumie to nawet nie wiem po co dyskutuję...
Jeżeli mówiąc "po staremu" masz na myśli statyczne alokowanie, to jest spora różnica. To jest alokowanie statyczne, czyli po wyjściu z zakresu funkcji obiekt jest automatycznie usuwany: [syntax=cpp] void f() { Obiekt a; } [/syntax] Lecz jeżeli masz funkcję która ma przetworzyć nieokreśloną z góry (w czasie pisania programu) ilość danych, to używasz...
Witam, ponownie mam problem z dynamiczną alokacją pamięci i pobieraniem danych od użytkownika. Działanie programu powinno wyglądać tak: 1. Użytkownik wpisuje na przykład 1 2 3; 4 5 6 ;7 8 9; 2. program dynamicznie alokuje w pamięci tablicę 3x3 o zawartości 1 2 3 4 5 6 7 8 9 Dodatkowe założenia: użytkownik może wpisać DOWOLNĄ ilość spacji pomiędzy wartościami...
Z dynamiczną alokacją pamięci na mikrokontrolerach trzeba uważać, często powoduje problemy. Niektóre kompilatory nie dopuszczają opcji dynamicznej alokacji pamięci, nawet nie umożliwiają wywołania rekurencji (model reentrant i non-reentrant). Szczególnie dla uc 8-bitowych.
Potrzebuję w projekcie użyć dynamicznej alokacji pamięci, niestety malloc() zawsze zwraca mi NULL. 1. Proponuję nie używać malloc w projektach embedded. 2. Najprawdoposobniej sbrk jest tylko "kadłubkowa" dla zapernienia linkowania się kodu. Co zrobić: 1. Jeżeli się już uparłeś na "malloc" to proponował bym freeRTOS-a z jego implementacją heap4.c albo...
polecenia które mają na początku "f" dotyczą plików - od "file". Plik to oczywiście nie plik na dysku, to po prostu struktura, która zawiera w sobie informacje jak do niej pisać. Można takie struktury tworzyć dla LCD, 1wire i czego dusza zapragnie, ale moim zdaniem nie ma co mieszać. Przy użyciu zwykłego printf piszesz do pliku który nazywa się stdout,...
A jak wygląda zarządzanie pamięcią w tym RTOSie? Czy można bez przeszkód używać dynamicznej alokacji nie obawiając się HardFault co kilka minut?
Dynamiczna alokacja jest po to aby na sztywno nie rezerwować całego obszaru LCD tylko w zależności od potrzeb, jak ci się nie podoba rezerwacja dynamiczna powołaj tablice jako globalna i przekazuj funkcji. Ja nie narzekam na kod wszystko się fajnie analizuje. Dodano po 56 czyli jak dam +1 to też zadziała? Dodano po 15 A jeszcze jedna sprawa czy linia...
(at)BlueDraco W takim wypadku weź dopisz do Wiki coś o dynamicznej alokacji bo zapomnieli napisać: https://en.wikipedia.org/wiki/Object-ori... Edit: Na stronie o dynamicznej alokacji równiez zapomnieli wspomnieć OOP: https://en.wikipedia.org/wiki/C_dynamic_...
1188015 mam problem z następującym kodem i zadanie z nim związane a dokładnie zadanie polega na zestrzeleniu wszystkich wrogich statków następowało przejście na kolejny poziom, na którym jest więcej statków. Wykorzystać dynamiczną alokację pamięci. mam z tym problem ponieważ nie wiem jak użyć malloca i realloca.Pozdrawiam
Ja ze swojej strony polecam D ([url=https://dlang.org/]https://dlang.o... To taki C#, który kompiluje się do kodu natywnego, ma różne modele zarządzania pamięcią (statyczna, dynamiczna alokacja, garbage collector). Można by rzec, że to C++ na sterydach. Co więcej, można robić coś, co w Ruście jest trudne - mieszać ASM/C/C++/D w jednym projekcie. Kiedyś...
Zaczekaj bo nie wiem czy dobrze zrozumiałem. Lista przeważnie składa się ze wskaźnika do następnego elementu tego samego typu (w tym wypadku moim zdaniem 2 bajty) oraz wskaźnika do danych (jakieś struktury, moim zdaniem w tym wypadku 2 bajty) co daje razem 4 bajty. Chyba, że ma kolega na myśli wbudowanie wskaźnika do następnego elementu w strukturze...
Teoretycznie funkcja malloc() przy braku miejsca zwraca NULL- jednak nie używam dynamicznej alokacji pamięci także ten sposób odpada napisać funkcję kontrolującą stos, odpalić w symulatorze tylko jak taka funkcja miała by wyglądać coby informowała o nałożeniu się stosu na sekcje danych... jedyne rozwiązanie jakie mi przychodzi do głowy to właśnie porównywać...
Pytanie - w jakich branżach/rozwiązaniach używa się alokacji statycznej a w jakich można sobie pozwolić na alokacje dynamiczną. Myślę że to zależy od wielu czynników. Po pierwsze od tego czy taka alokacja dynamiczna ma w danym przypadku jakieś zalety. Jeśli projekt jest prosty, to np. bawienie się alokację dynamiczną nic nie da, za to przy bardziej...
No ale przecież problemów z dynamiczną alokacją w GCC to ja tutaj jeszcze nie widziałem [; 4\/3!!
BlueDraco Nie mogę się z tym zgodzić. Jakoś w każdym szanującym się RTOS'ie jest dostępna dynamiczna alokacja pamięci. Oczywiście jest to często źródło problemów ale takie ale są sytuacje gdzie bez dynamicznej alokacji nie da się zbyt wiele zdziałać. W rzeczywistości w duzych projektach dzięki dynamicznej alokacji jest więcej dostępnej pamięci ;)....
pamiętaj również o dynamicznej alokacji pamięci dla tej zmiennej (konieczne, jeśli nie znamy rozmiaru tablicy)
Taaak, AVR o niczym innym nie marzy, niż o dynamicznej alokacji obiektów w swej potężnej pamięci. Może jeszcze metody wirtualne, żeby go do końca dorżnąć, co?
większe obiekty powinieneś alokować na stercie No z tą teza w przypadku uK to bym polemizował. Dynamiczna alokacja jest dość karkolomnym, trudnym i niebezpiecznym narzędziem w przypadku uK. Zresztą wiele standardów jej zabrania
Przecież istnieje coś takiego jak dynamiczna alokacja pamięci to raz a dwa to moja linijka przecież ma już znany rozmiar na etapie kompilacji.
Proba zaalokowania wiecej niz jednego elementu klasy macierz konczy sie niepowodzeniem, tylko jeszcze nie widac efektow. Zmienna zadeklarowana jako class macierz **A jest wskaznikiem na wskaznik, czyli etykieta, ktora wskazuje na jakis adres w pamieci, pod ktorym przechowywany jest jakis inny adres (elementu docelowego). Inaczej jest to tez jednoelementowa...
Generalnie: 1. Czemu tablica przechowująca macierz jest jednowymiarowa i do tego alokowana statycznie? Taki błąd na dzień dobry dyskwalifikuje rozwiązanie. 2. Czemu metoda wielkość jest prywatna? Przecież o to chodzi że zewnątrz obiektu użytkownik chce zobaczyć ile jest zajętej pamięci. 3. Czemu w main() mieszasz printf z cout, czy ma to jakieś uzasadnienie?...
Trochę sporo to wszystko zajmuje własnie, a z pełną obsługą dynamicznej alokacji (i GC) coś czuję że byłoby jeszcze więcej... /; Ale i tak fajnie że udało Ci się to uruchomić (; 4\/3!!
ggc umozliwia rowniez dynamiczna alokacje tablicy na stosie: int n; cout<<"Ile liczb"; cin>>n; int tablica[n];
wiesniak - czegos takiego kompilator nie przepusci; Jacko12345 - jesli nie znasz rozmiaru tablicy na poczatku, to jedynym wyjsciem jest wspomniana wyzej dynamiczna alokacja. Pozdrawiam.
Generalnie, to dynamicznej alokacji się uczyłem sam, na zajęciach jeszcze tego nie było, więc lepiej, żebym teraz popełnił te błędy niż w przyszłości. Dlaczego tablica się nie rozszerzy wraz ze wzrostem n?
Myślę że lepiej się tego nie da rozwiązać. Opcja z kopiowaniem odpada, bo funkcja kopiująca musiałaby być również wirtualna - mając tylko typ bazowy (abstrakcyjny), nie możesz go skopiować (bo jest pure virtual), a nawet jeśli byś mógł, to narażasz się na bardzo ciężki do wykrycia i niebezpieczny problem - tzw. "slicing". Jeśli stosujesz wzorzec "dependency...
gdzie tworzysz obiekt klasy string zwracasz go jako rezultat (a tak właściwie to wskaźnik) ale on w tym momencie już "nie żyje" bo jest lokalną zmienną. Ja tam nie widzę żadnych wskaźników. Za to na pewno w środku jest dynamiczna alokacja.
Witam, Tak już robiłem i np. SRAM = .data + .bss wychodziło mi około 12kb a procek miał 32kb. Czyli to by oznaczało, że reszta to stos, czyli że te 20kb stosu jest za mało? Nie używam dynamicznej alokacji pamięci. Pozd
W takim razie pozostaje dynamiczna alokacja pamięci czyli opcja b. Język C++ oferuje operatory new i delete, natomiast w języku C pozostaje calloc, malloc, free i realloc.
Szybka odpowiedź. Trzeba Ci wiedzieć jak działa procesor i Memory Management Unit (MMU). Działa tak, że buduje z kawałków pamięci fizycznej, pamięć wirtualną. Z kawałków o ustalonej długości, im mniejsze kawałki tym lepsza oszczędność pamięci ale większa tablica mapowania fizycznej pamięci na wirtualną i kupa innych kłopotów. Każda aplikacja porusza...
Pierwsze trzy rzeczy o których pisze przemko nie mają wpływu na to działanie, natomiast ma rację dalej. Tylko, że to nie jest obiekt statyczny tylko automatyczny, musi być dynamiczna alokacja pamięci, żeby dane wskazywane przez wskaźniki nie traciły się po wykonaniu funkcji.
bylo juz to na forum Podam spoob dynamicznej alokacji tablicy dwuwymiarowej double **tab; int wiersze,kolumny;//rozmiar macierzy tab = new *double[wiersze];//tworzenie tablicy wskaznikow tab[0] = new double[wiersze*kolumny];//tablic... elementow double for(int i=1;i<wiersze;i++) tab[i] = tab[i-1] + kolumny;...
Nie. Zapis ma się nie udać . Ale owszem, program ma pójść dalej. To ze stosem to pomyłka. O dynamicznej alokacji w ogóle nie myślę. I zamierzam nigdy z niej nie korzystać, chyba że jakaś biblioteka będzie to robiła sobie w środku.
Patrząc na kod newliba obawiam się, że fdopen() niewiele Ci da - naprawdę fopencookie() jak dla mnie jest najlepszą opcją i najmniej w niej kombinowania. Do tego funkcja ta _NIE_ wymaga _write_r() anid _open_r() ani w sumie niczego poza _sbrk_r() (bo jak większość funkcji z stdio.h używa dynamicznej alokacji).
(at)Maaaarek84 za wcześnie dla Ciebie na teoretyzowanie. Przyjmij jako aksjomat: 1. Nie pisz w main 2. Wydzielaj do funkcji fragmenty logik programu 3. Unikaj jak ognia zmiennych globalnych. 4. Jezeli piszesz na MCU - nie używaj dynamicznej alokacji. 5. Pamiętaj, że język C ma "szarą strefę" zwaną "Undefined Behaviour" gdzie definicja języka nie specyfikuje...
Eagle - twój post jest niezbyt pomocny, zwracam się z prośbą do ludzi na forum, bo wszelkie tradycyjne metody mnie zawiodły Michalko - starczy z pewnością bo co chwile uruchamiam vTaskList() i są jeszcze duże rezerwy, a poza tym przy dynamicznej alokacji problem też wystepuje
To najprawdopodobniej problem z dynamiczną alokacją pasma w Mi TV Stick. Xiaomi wprowadziło ostatnio aktualizację firmware, która zwiększa bufory dla Netflixa kosztem innych aplikacji, co może powodować ścinki na YouTubie. Mi TV Stick, mimo deklarowanego wsparcia dla Wi-Fi 5, ma tendencję do przełączania się na 2,4 GHz w przypadku wykrycia dużej liczby...
Nawet jeśli longjmp nie przywraca trybu procesora, chyba można to zrobić przed lub po skoku? RETI umożliwia jednoczesny powrót i włączenie przerwań. Gdyby chcieć zrobić to osobno, najpierw należałoby powrócić, a następnie włączyć przerwania. Normalnie nie jest to możliwe, bo powrót jest do nieustalonego z góry miejsca. Tutaj jest znane. Ja tu widzę...
Wiki: SOM-3 w trzech wersjach (w tym wersja EXTENDED - wielozadaniowy z dynamicznym przydziałem pamięci); CROOK – oparty na ideach systemu Unix. Z tego co wiem to nie jesteś fanem ani dynamicznej alokacji ani abstrakcji związanej z plikiem w Unixie. Nadal Twoje argumenty są niedorzeczne.
Z ilością miejsca jest właśnie problem. Przyrost 20kB jak na razie nie jest dopuszczalny. Co do sprintf'a dzięki za linki. Już sobie z tym poradzę :) Nie chcę zaczynać nowego wątku, więc napiszę to tutaj. Chodzi o implementację funkcji sscanf, która nie korzysta z dynamicznej alokacji pamięci. Czy natknąłeś się może na coś takiego?
Może nie ma miejsca na stercie i nadpisujesz stos, albo coś? Albo wskaźniki stosu i sterty są tak blisko siebie? Ogólnie działa Tobie dynamiczna alokacja pamięci (malloc)? Nigdy nie programowałem procesorów, nie znam tez architektury, ale spojrzałem szybko w kod i takie rzeczy mi się nasunęły.
Zrobiłem tak jak sugerowałeś, ale niestety nie przyniosło to zamierzonego efektu, ale jest zmiana. Sugerowałem więcej niż jedną rzecz pewnie, więc napisz czego spróbowałeś dokładnie (; Sam znasz swoją aplikację - jeśli np. wywołuje ona wielowątkowo dynamiczne alokacje (inicjalizacja stdio robi takową kilkukrotnie), to bez odpowiedniego zabezpieczenia...
Wszystko pięknie, tylko wykorzystanie zmiennych środowiskowych "kosztuje" u mnie jakieś 32kB kodu i trochę ponad 1kB RAM (+ zapewne jeszcze dynamiczna alokacja), więc chyba sobie daruję strefy czasowe <: Analiza na szybko każe mi sądzić, że przyrost związany jest z funkcją scanf() (czy jakimś jej wariantem). 4\/3!!
Mój program nie potrzebuje raczej dynamicznej alokacji ponieważ będzie wykorzystywana tablica o określonej wielkości i w dodatku bardzo często więc nie ma sensu jej tworzenia i usuwania. Btw, Michalku mógłbyś mi zaprezentować jak za pomocą dzielenia modulo miałbym rozdzielić np 2345 na poszczególne cyfry? Bo jakoś mi to nie idzie...
Mam np. następującą strukturę: [syntax=cpp-qt] struct telefony { char marka[20]; float przekatna_ekranu; float waga; }; [/syntax] Teraz deklaruję oraz inicjalizuję tablicę struktur o nazwie np. nokia: [syntax=cpp-qt] telefony nokia[3] = { {"6300", 2, 91}, {"N82", 2.4 , 114}, {"Lumia 520", 4, 124} }; [/syntax] A jak najwygodniej zrobić podobną inicjalizację,...
Witam, jesli jej nie usuniesz, program zostawi po sobie śmieci w pamięci. W dodatku gdy częściej będziesz używał takich instrukcji i nie będziesz usuwał zaalokowanej pamięci, wycieknie ona. Jest wiele programów do badania wycieków pamięci i jeśli używasz dynamicznej alokacji, zawsze warto takiego użyć. Pozdrawiam, Krzysztof.
Kaj już kol (at)LChucki napisał - dynamiczna alokacja nie jest szczególnie dobrym pomysłem szczególnie jeżeli często alokujesz/zwalniasz. HardFault zostawia śladd na stosie i w rejestrach. Zobacz po prostu gdzie on wystąpił i co go spowodowało. https://mcuoneclipse.com/2012/11/24/debu... Albo zainstaluj sobie IDE, które...
To małe podpowiedzi - użyj typedef, żeby nie tworzyć takich typecastowych potworków :) I druga - pamiętaj, że tablica wskaźników to tylko tablica wskaźników. Zasadniczo implikuje to użycie dynamicznej alokacji pamięci, albo przypasanie wskaźnikom wyłącznie adresów zmiennych globalnych, nigdy nie lokalnych. Ale K&R to dobry trop, tylko czytaj go od początku,...
Zgodnie z nazwą ten problem da się rozwiązać jedynie poprzez dynamiczną alokację pamięci (; Niemniej jednak nie musi to być koniecznie malloc() czy new, wystarczy np. jeden wielki bufor, z którego w swoim programie "odcinasz" potrzebne Ci kawałki - to po prostu byłaby Twoja sterta. Niemniej jednak zbyt wiele nie zyskasz tak czy siak... Może prościej...
Zrób dynamiczną alokację pamięci. float **tab = new float *[3]; tab[0] = new float[rozmiar1]; tab[1] = new float[rozmiar2]; tab[2] = new float[rozmiar3]; // jakieś operacje na tablicy for(int i = 0; i< 3; i++) delete[] tab[i]; delete []tab;
Niestety ciągle jest błąd: I będzie. Przecież ci napisałem, że ta pamięć może być w prosty sposób przeznaczona tylko na stertę. Czyli przenieś statycznie alokowane dane, do alokacji dynamicznej na stercie i będzie ok.
0. Żeby wyszukiwało pliki w podfolderach trzeba je podać wprost w odpowiedniej linijce w Makefile. 1. Treść chyba mówi sama za siebie. 2. W przykładach plik ten jest lekko zmodyfikowany - z tego co pamiętam wystarczy wpisać "void" do pustego nawiasu i już. 3. Potrzebne Ci będą też syscalls, ewentualnie zmień używany tryb dynamicznej alokacji pamięci....
Oczywiście warto stosować aksjomaty obiektowe w programowaniu w C, ale jak bez dynamicznej alokacji nie użyć zmiennej globalnej? Oczywiście można ją ukrywać w pliku C dodatkowo zaopatrywać w static, ale tego się nie obejdzie. Dopisałem jak ja bym do tego podszedł, a nie odpowiedziałem sobie, bo nie oczekiwałem odpowiedzi, a raczej komentarza od bardziej...
Albo można - dla ćwiczenia - pobawić się strzelaniem z armaty do wróbla i zająć się dynamiczną alokacją pamięci. W takim wypadku stworzysz listę struktur. Na pierwszy element takiej listy musisz posiadać w pamięci wskaźnik. Zamiast tworzyć zmienną "pozycja" tworzysz strukturę "pozycja" a w niej zmienną "indeks" oraz wskaźnik na następny element listy....
nie wiem do konca o co ci w tym chodzi ale moze o dynamiczna alokacje tablicy wtedy nalezy napisac: int **tab; tab = new *int[10]; tab[0] = new int[10*10]; for(i=1;i<10;i++) tab[i] = tab[i-1] + 10; wtedy odwolanie sie do tablicy moze wygladac tak; odczyt a = tab[1][1]; zapis tab[2][2] = 5
Jako, że w zademonstrowanym programie nie ma dynamicznej alokacji pamięci, to nie możemy mówić o wyciekach pamięci. 1. Funkcja strtok2() nie robi tego, co ma w opisie, więc nie mogę stwierdzić, czy działa poprawnie, a raczej stwierdzam, że nie działa poprawnie. Dość dużo miesza tutaj "static src". Napraw albo funkcję, albo opis. 2. funkcja strtok2()...
(at)herszt: jeśli jest tak, jak napisał Kolega arrevalk, to powinieneś ten usuwać to na co wskazuje wskaźnik przed przypisaniem mu kolejnego fragmentu pamięci. Jeśli nie robisz tego, to tworzysz w pamięci obszary, na które nic nie wskazuje, co oznacza, iż są to śmieci - nic na nie nie wskazuje, ale to jednak pamięć zaalokowana przez program, więc system...
wczytuje z pliku dane, wykonuje na nich różne operacje (jest tam dynamiczna alokacja zmiennych, używam również vectorów, wszędzie zwalniam zmienne dynamicznie zaalokowane, co jeszcze mogę napisać, korzystam z biblioteki windows.h używam MessageBoxów i tym podobnych okienek). Program był robiony techniką proceduralno-zdarzeniową, nie obiektowo. Aha program...
Sorry ~Radek , ale nie pokazuj proszę tego kodu jako przykładu rozwiązania tego zadania. 1) po co Ci w ogóle wsk_2? 1a) przydzielasz pamięć na tablicę, a jej nie zwalniasz. 2) czemu dynamiczna alokacja pamięci? Przecież rozmiar jest znany i zawsze równy 100. 3) program się zapętli, jeśli wpiszesz CTRL-Z i enter (pod windowsem). 4) średnią liczysz jako...
Co do lock i unlock, to proponuję raczej sekcję krytyczną, chyba że alokujesz dynamicznie pamięci z kontekstu przerwania (to wtedy musi być blokada przerwań) lub nigdy nie wykorzystujesz selektywnego "zawieszania" tasków (wtedy może być suspend-all). Suspend all jest wywoływany w wewnętrznych funkcjach FreeRTOSa takich jak na przykład delay, więc lepiej...
Dzięki Freddie! Po odblokowaniu __USES_CXX i pobraniu syscalls kontenery działają jak należy. Mam jednak jeszcze jedno male pytanko: chcialem użyć standardowej kolejki FIFO (std::queue) do której w main-e wrzucam jakaś wartość natomiast w przerwaniu ta wartość odczytuje. W którymś ze swoich postów pisałeś ze dynamiczna alokacja pamięci w przerwaniach...
alokacja pamięć rozmiar alokacja dynamiczna alokacja
układ odcinający prąd zasilać miniusb honda civic termostat
falownik danfoss akumulator easun lifepo4
Jaki MOSFET do wkrętarki 18V? Wybór i parametry Carrier 1550 zablokowany - jak odblokować bez komputera?