Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 31-01-2007, 22:40   #1
fsdfdsddijsdfsdfo
Registered User
 
Iscritto dal: Sep 2002
Messaggi: 1025
[c] aiuto banale calloc

ecco il sorgente

Codice:
#include <stdio.h>
#include <stdlib.h>

int *p;

void next (int *p, int i)
{
	
	p=calloc(i+1, sizeof(int));
	p[i]=i; 
	 
}

int main() 
{
	int i;

	

	for (i=0; i<10; i++) next(p, i);

	for (i=0; i<10; i++) printf("%3d", p[i]);

	printf("\n");

return 0;
}

vorrei scrivere un programma che metta 100 numeri successivi partendo da 0 in un vettore p e poi li stampi.

Ma vorrei che a ogni ripetizione allunghi il vettore di 1.

Come faccio? il codice cosi va in core dump. Grazie.

Mi spieghereste poi in pratica la differenza fra malloc e calloc?
fsdfdsddijsdfsdfo è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2007, 23:33   #2
vizzz
Senior Member
 
L'Avatar di vizzz
 
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
prova a castare la calloc al tipo che ti interessa
Codice:
p=(int*)calloc(i+1, sizeof(int));
perchè altrimenti calloc torna il puntatore ad un char.
malloc alloca un solo blocco alla volta della dimensione voluta.
vizzz è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2007, 23:58   #3
fsdfdsddijsdfsdfo
Registered User
 
Iscritto dal: Sep 2002
Messaggi: 1025
ragazzi siete stati gentilissimi e chiarissimi... però il codice ancora non riesco a metterlo a posto

Codice:
#include <stdio.h>
#include <stdlib.h>

int p[1];

void next (int *p, int i)
{
	
	p=(int*)realloc(p, sizeof(int));
	p[i]=i; 

	
}

int main() 
{
	int i;

	

	for (i=0; i<10; i++) next(p, i);

	for (i=0; i<10; i++) printf("%3d", p[i]);

	printf("\n");

return 0;
}
mi da:
Codice:
*** glibc detected *** ./a.out: realloc(): invalid pointer: 0x08049654 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__libc_realloc+0x31c)[0xb7e1aefc]
/lib/tls/i686/cmov/libc.so.6[0xb7e1b041]
/lib/tls/i686/cmov/libc.so.6(__libc_realloc+0x3c)[0xb7e1ac1c]
./a.out[0x80483dd]
./a.out[0x804841f]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xdc)[0xb7dc78cc]
./a.out[0x8048341]
======= Memory map: ========
08048000-08049000 r-xp 00000000 03:01 3443577    /home/lucrezia/lab/a.out
08049000-0804a000 rw-p 00000000 03:01 3443577    /home/lucrezia/lab/a.out
0804a000-0806b000 rw-p 0804a000 00:00 0          [heap]
b7da6000-b7db0000 r-xp 00000000 03:01 538576     /lib/libgcc_s.so.1
b7db0000-b7db1000 rw-p 00009000 03:01 538576     /lib/libgcc_s.so.1
b7db1000-b7db2000 rw-p b7db1000 00:00 0 
b7db2000-b7edf000 r-xp 00000000 03:01 538584     /lib/tls/i686/cmov/libc-2.4.so
b7edf000-b7ee1000 r--p 0012c000 03:01 538584     /lib/tls/i686/cmov/libc-2.4.so
b7ee1000-b7ee3000 rw-p 0012e000 03:01 538584     /lib/tls/i686/cmov/libc-2.4.so
b7ee3000-b7ee7000 rw-p b7ee3000 00:00 0 
b7ef3000-b7ef4000 rw-p b7ef3000 00:00 0 
b7ef4000-b7f0d000 r-xp 00000000 03:01 540056     /lib/ld-2.4.so
b7f0d000-b7f0f000 rw-p 00018000 03:01 540056     /lib/ld-2.4.so
bf847000-bf85d000 rw-p bf847000 00:00 0          [stack]
ffffe000-fffff000 ---p 00000000 00:00 0          [vdso]
Aborted (core dumped)
fsdfdsddijsdfsdfo è offline   Rispondi citando il messaggio o parte di esso
Old 01-02-2007, 09:50   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da dijo
ragazzi siete stati gentilissimi e chiarissimi... però il codice ancora non riesco a metterlo a posto
Ci sono alcune cose che non vanno:

a) Alla realloc tu passi la variabile locale 'p' (l'argomento della funzione) che come valore è l'indirizzo dell'array 'p' globale. Nota bene: alla realloc puoi solo passare o un puntatore NULL (nel qual caso si comporta come una malloc) oppure un qualunque altro valore che però deve essere stato ottenuto da una precedente malloc/calloc/realloc. Non puoi qundi passare alla realloc un qualunque puntatore di una generica variabile!!

b) Nella funzione next() il valore restituito dalla realloc lo assegni a 'p' ma quel 'p' è la variabile locale (l'argomento), non il 'p' globale. Pertanto la tua allocazione non serve a nulla .... in pratica si perde quando la funzione termina.

Spiega bene e meglio cosa vuoi fare, perché così come è il tuo programma non funziona e comunque ha poco senso.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 01-02-2007, 10:57   #5
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Ci sono due errori seri:
- non puoi eseguire realloc su un puntatore statico!
- il parametro int *p modificato dalla funzione next viene perso all'uscita della funzione!

Codice:
int p = NULL;

int *next (int *p, int i)
{
        
        p = realloc(p, sizeof(int)*(i+1));
        p[i] = i; 
        return p;
}

...
        for (i=0; i<10; i++)
               p = next(p, i);
Per curiosità, perché vuoi scrivere un codice così poco efficiente?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12

Ultima modifica di ilsensine : 01-02-2007 alle 10:59.
ilsensine è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
Artemis II: il prossimo Wet Dress Rehear...
Il nuovo HONOR 600 sta arrivando e avr&a...
La crisi delle memorie non coinvolger&ag...
Windows domina su Steam, ma molti utenti...
Per non incorrere in nuovi aumenti delle...
Cubi Z AI 8M visto da vicino, un mini-PC...
Datacenter nello Spazio, affascinante ma...
Social e minori, Butti apre al dibattito...
Tutte le offerte Amazon del weekend, sol...
Amazon spinge sull'usato garantito: 10% ...
TikTok rischia una maxi-multa in Europa:...
Bose su Amazon: QuietComfort SC over ear...
Scope elettriche super accessoriate in o...
Umidità e muffa addio: questo deu...
DREAME Aqua10 Ultra Roller a 999€ &egrav...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:35.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v