Ten kod daje mi błąd segmentacji około 1/2 czasu:Segmentacja ze względu na brak pamięci w C
int main(int argc, char **argv) {
float test[2619560];
int i;
for(i = 0; i < 2619560; i++)
test[i] = 1.0f;
}
I rzeczywiście trzeba przeznaczyć znacznie większy wachlarz, czy istnieje jakiś sposób pozwalając system operacyjny, aby uzyskać więcej pamięci?
używam Linux Ubuntu 9.10
Jeśli korzystasz z funkcji malloc, możesz sprawdzić kod, jeśli alokacja się powiodła - znacznie lepiej niż przy alokacji z nadzieją, że się nie zawiesza. (addendum, nie tyle komentarz @ cas) –
@Sam Dufel Należy pamiętać, że niektóre systemy (np. linux domyślnie) mogą zwrócić ci nie-zerowy wskaźnik z malloc, nawet jeśli nie masz pamięci - co prowadzi do podobnych awarii, gdy próbujesz uzyskać dostęp do tej pamięci. – nos
To chyba bardziej dokładne stwierdzenie, że niektóre systemy oddzielają pojęcia przydzielania wirtualnej przestrzeni adresowej i zatwierdzania magazynu kopii zapasowych. – caf