ciao a tutti,
sono un bioinformatico e sto finendo un prog in C (mi serve veloce per il genoma!), ma a parte il resto del codice che funzia ho un problema con la gestione della memoria con calloc() (e anche malloc()... che ho provato ma da lo stesso problema).
mi spiego:
ho il seguente framm di codice (premetto che ho dich: char *x_1):
i=0;
while (i <= 26)
{
x_1 = (char *) calloc(Cl[i], sizeof(char)); // 1) 1 qui da errore
i++;
count=0;
CoC_tot=0;
CoS_tot=0;
Com_tot=0;
for(; {
x_1 = (char *) calloc(Cl[i], sizeof(char)); // 2) anche qui da errore
if (fgets(b,200,fp4) == NULL) {
break;
}
sscanf(b,"%d %d %d %d %d %f %f %f %d %d\n",&C, &Start, &End, &Len, &Span, &cos, &com, &coc, &in1, &in2);
if (C==i) {
count++;
x_1 = (char *) calloc(Cl[i], sizeof(char)); //// qui è OK!!!
printf("ecco che inizio a caricare %d",x_1);
printf("K:%d e i:%d e C:%d e Cl[%d]:%d\n",k,i,C,i,Cl[i]);
for (k=0; k <= Cl[i]; k++) {
x_1[k]='_';
}
....
la mia calloc() funziona nell'IF annidato if C==i, ma non appena la tiro fuori e la metto in pos 1) o 2) -vi allego il framm di codice sopra, con i numeri- gcc compila bene ma in esecuzione il prog mi da il seguente errore:
a.out(263) malloc: *** vm_allocate(size=191275008) failed (error code=3)
a.out(263) malloc: *** error: can't allocate region
a.out(263) malloc: *** set a breakpoint in szone_error to debug
che poi, nel file specifico di log Logs/CrashReporter/a.out.crash.log è:
Exception: EXC_BAD_ACCESS (0x0001)
Codes: KERN_PROTECTION_FAILURE (0x0002) at 0x00000000
Thread 0 Crashed:
0 a.out 0x00003424 riepilogo + 448 (crt.c:355)
1 a.out 0x00002ea4 main + 1948 (crt.c:355)
2 a.out 0x00001f54 _start + 348 (crt.c:272)
3 a.out 0x00001df4 start + 60
Thread 0 crashed with PPC Thread State:
srr0: 0x00003424 srr1: 0x0000f030 vrsave: 0x00000000
cr: 0x24000224 xer: 0x00000004 lr: 0x00003404 ctr: 0x90013880
r0: 0x0000005f r1: 0xbffff850 r2: 0x00000000 r3: 0x0000002c
r4: 0x00000000 r5: 0x00000048 r6: 0x0000000a r7: 0x00000048
r8: 0x00000889 r9: 0x00000000 r10: 0x00003f0b r11: 0x84000282
r12: 0x90013880 r13: 0x00000000 r14: 0x00000000 r15: 0x00000000
r16: 0x00000000 r17: 0x00000000 r18: 0x00000000 r19: 0x00000000
r20: 0x00000000 r21: 0x00000000 r22: 0x00000000 r23: 0x00000000
r24: 0x00000000 r25: 0x00000000 r26: 0xbffffcd4 r27: 0x3ff00000
r28: 0xbffff8e8 r29: 0xbffff8dc r30: 0xbffff850 r31: 0x0000327c
Binary Images Description:
0x1000 - 0x3fff a.out /Users/Ele/Ese_prog_C/a.out
0x8fe00000 - 0x8fe50fff dyld 43 /usr/lib/dyld
0x90000000 - 0x901a6fff libSystem.B.dylib /usr/lib/libSystem.B.dylib
0x901fe000 - 0x90202fff libmathCommon.A.dylib /usr/lib/system/libmathCommon.A.dylib
0x91d33000 - 0x91d53fff libmx.A.dylib /usr/lib/libmx.A.dylib
ho provato e riprovato ma nulla!!! ho perfino provato ad allocare un vettore definito lì, ma nulla!
io ho bisogno che quel vettore si riazzerei FUORI dall'IF, e non dentro...
mi aiutate per favore????
grazie ,e a buon rendere.
dani