Funkcja malloc wykonuje dynamiczną alokację pamięci w języku C i jest częścią biblioteki standardowej. Użyj tego tagu, jeśli masz pytania dotyczące użycia, zachowania i implementacji malloc.
W tej kwestii , ktoś sugerowane w komentarzu , że powinienem nie rzucać wynik malloc, czyli int *sieve = malloc(sizeof(int) * length); zamiast: int *sieve = (int *) malloc(sizeof(int) * length); Dlaczego miałoby tak być?
To mnie martwiło od wieków. Wszyscy uczymy się w szkole (przynajmniej ja byłem), że MUSISZ uwolnić każdy przydzielony wskaźnik. Jestem jednak trochę ciekawy, jakie są rzeczywiste koszty nie zwalniania pamięci. W niektórych oczywistych przypadkach, takich jak mallocwywołanie w pętli lub części wykonania wątku, bardzo ważne jest zwolnienie, aby nie było …
Widzę w C ++, że istnieje wiele sposobów przydzielania i bezpłatnego przesyłania danych. Rozumiem, że kiedy dzwonisz malloc, powinieneś zadzwonić, freea kiedy używasz newoperatora, powinieneś się sparować deletei błędem jest połączenie tych dwóch (np. Dzwonienie free()na coś, co zostało stworzone z newoperatorem), ale nie jestem pewien, kiedy powinienem używać malloc/ …
alloca()przydziela pamięć na stosie, a nie na stercie, jak w przypadku malloc(). Kiedy wracam z rutyny, pamięć zostaje uwolniona. Tak więc faktycznie rozwiązuje to mój problem zwalniania dynamicznie alokowanej pamięci. Zwolnienie pamięci przydzielonej przez malloc()to poważny ból głowy i jeśli w jakiś sposób pominięty, prowadzi do różnego rodzaju problemów z …
Wiadomo, że callocróżni się od malloctego, że inicjalizuje przydzieloną pamięć. Za callocpomocą pamięć jest ustawiona na zero. Zmalloc pomocą pamięć nie zostanie wyczyszczona. Tak więc w codziennej pracy uważam callocza malloc+memset . Nawiasem mówiąc, dla zabawy napisałem następujący kod dla testu porównawczego. Wynik jest mylący. Kod 1: #include<stdio.h> #include<stdlib.h> #define …
Dziś doszedłem strona 167 z The C Programming Language (wydanie drugie Brian W. Kernighan i Dennis M. Ritchie) i okazało się, że autor mówi muszę rzucać malloc. Oto część z książki: 7.8.5 Zarządzanie pamięcią masową Funkcje malloc i calloc dynamicznie uzyskują bloki pamięci. void *malloc(size_t n) zwraca wskaźnik do n …
W mojej firmie obowiązuje zasada kodowania, która mówi, że po zwolnieniu pamięci należy zresetować zmienną do NULL. Na przykład ... void some_func () { int *nPtr; nPtr = malloc (100); free (nPtr); nPtr = NULL; return; } Czuję, że w przypadkach takich jak w kodzie pokazanym powyżej, ustawienie na NULLnie …
Otrzymuję ten błąd: ostrzeżenie: niekompatybilna niejawna deklaracja funkcji wbudowanej „malloc” Próbuję to zrobić: fileinfo_list* tempList = malloc(sizeof(fileinfo_list)); Dla porównania, struktura używana pod ręką to: typedef struct { fileinfo** filedata; size_t nFiles; size_t size; size_t fileblock; } fileinfo_list; Nie widzę nic złego w tym, co zrobiłem. Po prostu tworzę a tempListo …
Jeśli używam mallocw moim kodzie: int *x = malloc(sizeof(int)); Otrzymałem to ostrzeżenie od gcc: new.c:7: warning: implicit declaration of function ‘malloc’ new.c:7: warning: incompatible implicit declaration of built-in function ‘malloc’
W projekcie ktoś przesunął tę linię: double (*e)[n+1] = malloc((n+1) * sizeof(*e)); Co rzekomo tworzy dwuwymiarową tablicę podwójnych liczb (n + 1) * (n + 1). Podobno mówię, ponieważ do tej pory nikt, kogo zapytałem, nie mógł mi powiedzieć, co to dokładnie robi, skąd się wzięło ani dlaczego powinno działać …
Sprawdzam czyjś kod C ++ dla naszego projektu, który używa MPI do obliczeń o wysokiej wydajności (10 ^ 5 - 10 ^ 6 rdzeni). Kod ma umożliwić komunikację między (potencjalnie) różnymi maszynami na różnych architekturach. Napisał komentarz, który mówi coś w rodzaju: Zwykle używamy newi delete, ale tutaj używam malloci …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.