[c program, malloc segitsegevel]Program ami kiírja mennyi megabyte-t tudott lefoglalni?
segitség:
4 bájt mallocolása : malloc( 4 );
1 MB mallocolása : malloc( 1000 );
Ez kell egy for ciklusba. amikor sikeres a malloc, akkor a ciklus változóba ++.
Végén az a változód tartalmazza a MB-ok számát.
Megvalósítást már tényleg rád bízom.
Köszönöm.
Nem tudom,hogy így jó-e de ez sikerult:
#include <stdio.h>
#include <stdlib.h>
#define MB 1024
int main () {
int *p,i=0;
while(p != NULL){
p = (int*)malloc(MB);
i++;
}
free(p);
printf("Lefoglalt memoria %d\n",i);
return 0;
}
1 MB mallocolása : malloc( 1000 );
Na ez meg főleg kiverte a biztosítékot :D Szóval a kérdésre is válaszolva:
Ha elkezded a memóriát foglalni, mint az őrült, akkor felzabálja az összeset, és összeomlik a windows, ezért javaslom, hogy ha nem fontos a pontosság, akkor foglalj minden lépésben 64MB-ot, így az utolsó sikertelen foglalás után még marad annyi memóriád, hogy ne omoljon össze a rendszer. A másik pedig, hogy a végén a memfree -vel csak a legutolsóként lefoglalt területet szabadítod fel. Ha itt véget ér a program akkor felesleges is, mert úgyis felszabadul az összes foglalt memória, ha pedig nem ér véget, akkor valahogy gondoskodni kellene arról, hogy szabadítsa fel az összes foglalt memóriát.
pl. én így oldottam meg, nem túl hatékony, de nem hagy maga után "szemetet":
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#define MB (1 << 20)
int main()
{
int i = 0;
void *p;
for(;;i+=MB){
p = malloc(i);
if(!p){
break;
}
free(p);
}
printf("Sikeresen foglalt: %f MB!\n", (float)i / MB);
return 0;
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!