Torna indietro   Hardware Upgrade Forum > Software > Programmazione

NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine
Dopo anni di attesa e una lunga fase di sviluppo, Noctua entra nel mercato dei dissipatori a liquido AIO con la nuova serie NL-LC1. Forte dell'esperienza maturata nel raffreddamento ad aria, l'azienda austriaca promette di portare la propria filosofia fatta di qualità costruttiva, attenzione ai dettagli e silenziosità anche in questo segmento. Abbiamo provato il nuovo sistema per scoprire se riesce a distinguersi in un mercato ormai molto competitivo.
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super
Arrivato sul mercato italiano a fine marzo, la serie Boox Go 10.3 (Gen II) offre Android 15, penna da 4096 livelli e retroilluminazione opzionale (nel modello da noi provato, Lumi, presente). La serie si compone di due tablet ePaper che fanno da e-reader, blocco note digitale e persino browser, tutto a un prezzo che fa dimenticare i prodotti di brand più blasonati
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Pannello QD-OLED da 32 pollici con risoluzione 4K, frequenza di aggiornamento a 240Hz e tempi di risposta rapidissimi: il Gigabyte MO32U24 evolve il progetto del suo predecessore MO32U e alza ulteriormente l'asticella delle prestazioni. È ancora una volta un monitor indirizzato ai giocatori più esigenti
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-01-2007, 16:30   #1
deggial
Senior Member
 
L'Avatar di deggial
 
Iscritto dal: Mar 2003
Città: tra Borgo Ticino e Milano
Messaggi: 6050
[C] Errore di segmentation fault

Ciao a tutti. Ho un piccolo (spero) problema con il C.

Ammetto di essere un pelo ignorante con stringhe e puntatori (e ho pure la presunzione di usare il C senza conoscere a fondo il magico mondo dei puntatori!), comunque nella porzione di codice sotto mi da un errore di segmentation fault:

Codice:
#include <iostream>

int main()
{
    const char *testo;
    int lun;
    int valore=13;

    testo=(char *) valore;
    lun=strlen (testo);
}
Qualcuno mi può aiutare e spiegare il perchè? Intuisco che c'è qualcosa che non va nella stringa testo, ma non capisco come mettere a posto.

Grazie a tutti!
__________________
firma in progress
deggial è offline   Rispondi citando il messaggio o parte di esso
Old 25-01-2007, 17:19   #2
yorkeiser
Senior Member
 
L'Avatar di yorkeiser
 
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
int valore=13;
testo=(char *) valore;

non ha senso in c, per quel che mi risulta.

Dallo strlen mi sembra di capire che tu stia cercando di convertire l'intero 13 in una stringa e salvarla nella variabile testo, per cui il codice corretto con i puntatori sarebbe:

#include <stdlib.h>
#include <string.h>

main()
{
char* testo;
int lun;
testo=(char*)malloc(MAX_LUNGH_STRINGA*sizeof(char)); //ricordate sempre di allocare memoria coi puntatori a stringhe !
itoa(13,testo,10); //conversione intero->stringa
printf("%s",testo);
lun=strlen (testo);
}
__________________
Il sole è giallo
yorkeiser è offline   Rispondi citando il messaggio o parte di esso
Old 25-01-2007, 17:20   #3
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da deggial
Codice:
#include <iostream>

int main()
{
    const char *testo;
    int lun;
    int valore=13;

    testo=(char *) valore;
    lun=strlen (testo);
}
Non puoi fare una conversione da un valore numerico ad una stringa con un cast (e nemmeno il contrario, ovviamente)!

Puoi usare sprintf() oppure itoa() (che però non è standard).

char testo[20];
int valore=13;
sprintf (testo, "%d", valore);
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 25-01-2007, 17:22   #4
Gandalf_BD
Senior Member
 
L'Avatar di Gandalf_BD
 
Iscritto dal: Jun 2004
Messaggi: 760
EDIT: ti hanno appena risposto già gli altri

infatti... la stringa testo va allocata... come hai fatto tu, qualche volta fuonziona e qualche volta no, ma se funziona lo fa per puro caso...
puoi dichiarare testo così:
Codice:
char testo[255]
oppure allocarlo in seguito così:
Codice:
testo = (char *) malloc(255*sizeof(char))
e poi, ma di questo non sono sicuro al 100%, non penso che la tua conversione da int a char con un semplice cast vada bene, ma di questo al momento non sono proprio sicuro...
__________________
Gandalf_BD
--------------------------------------------
"When you aim at perfection, you discover it's a moving target"
Gandalf_BD è offline   Rispondi citando il messaggio o parte di esso
Old 25-01-2007, 17:52   #5
deggial
Senior Member
 
L'Avatar di deggial
 
Iscritto dal: Mar 2003
Città: tra Borgo Ticino e Milano
Messaggi: 6050
Grazie, da quel che ho capito da voi (e dagli sbattimenti di oggi pomeriggio) ho capito che l'errore dovrebbe stare nel non aver allocato la memoria per la variabile testo.
Ora non sono in ufficio, e devo convincermi che NON voglio lavorare stasera, quindi proverò domattina a sistemare.

Sul fatto che non si possa convertire con un semplice cast, l'ho letto (o almeno immagino di averlo letto) su un libro (anche abbastanza autorevole che io sappia: Bellini, Guidi - Linguaggio C. Guida alla programmazione)...
Domani controllerò, magari sono io che ho interpretato in modo fantasioso qualche frase ambigua che era presente.
__________________
firma in progress
deggial è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2007, 09:33   #6
deggial
Senior Member
 
L'Avatar di deggial
 
Iscritto dal: Mar 2003
Città: tra Borgo Ticino e Milano
Messaggi: 6050
Grazie per le risposte, ma non si risolve comunque il problema...
A me serve che testo sia definito come const char, perchè poi devo utilizzarlo in una PQexecParam.

L'esempio che vi ho postato è molto semplificato, in realtà testo è un array di 11 stringhe, e PQexecParam è definita come segue:

Quote:
PGresult *PQexecParams(PGconn *conn,
const char *command,
int nParams,
const Oid *paramTypes,
const char * const *paramValues,
const int *paramLengths,
const int *paramFormats,
int resultFormat);

If parameters are used, they are referred to in the command string as $1, $2, etc. nParams is the number of parameters supplied; it is the length of the arrays paramTypes[], paramValues[], paramLengths[], and paramFormats[]. (The array pointers may be NULL when nParams is zero.) paramTypes[] specifies, by OID, the data types to be assigned to the parameter symbols. If paramTypes is NULL, or any particular element in the array is zero, the server assigns a data type to the parameter symbol in the same way it would do for an untyped literal string. paramValues[] specifies the actual values of the parameters. A null pointer in this array means the corresponding parameter is null; otherwise the pointer points to a zero-terminated text string (for text format) or binary data in the format expected by the server (for binary format). paramLengths[] specifies the actual data lengths of binary-format parameters. It is ignored for null parameters and text-format parameters. The array pointer may be null when there are no binary parameters. paramFormats[] specifies whether parameters are text (put a zero in the array) or binary (put a one in the array). If the array pointer is null then all parameters are presumed to be text. resultFormat is zero to obtain results in text format, or one to obtain results in binary format. (There is not currently a provision to obtain different result columns in different formats, although that is possible in the underlying protocol.)
Mi serve calcolare la lunghezza dei vari elementi di testo per specificarli in paramLengths[]

Qualcuno ha idee in merito???
__________________
firma in progress
deggial è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2007, 10:46   #7
yorkeiser
Senior Member
 
L'Avatar di yorkeiser
 
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
Cosa devi passare a quella funzione, solo le lunghezze o anche le singole stringhe di testo? Te lo chiedo perchè la funzione non accetta array di stringhe in input, solo semplici stringhe. Probabilmente usi qualche accrocchio per spezzettare una stringa in più stringhe (e probabilmente per far questo usi proprio l'array delle lunghezze delle singole stringhe)
__________________
Il sole è giallo
yorkeiser è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2007, 13:03   #8
deggial
Senior Member
 
L'Avatar di deggial
 
Iscritto dal: Mar 2003
Città: tra Borgo Ticino e Milano
Messaggi: 6050
Quote:
Originariamente inviato da yorkeiser
Cosa devi passare a quella funzione, solo le lunghezze o anche le singole stringhe di testo? Te lo chiedo perchè la funzione non accetta array di stringhe in input, solo semplici stringhe. Probabilmente usi qualche accrocchio per spezzettare una stringa in più stringhe (e probabilmente per far questo usi proprio l'array delle lunghezze delle singole stringhe)
Alla funzione passo questo:
Codice:
    
ris_insert = PQexecParams(conn,
            "INSERT INTO tab1 VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)",
            11,
            NULL,
            param,
            param_length,
            param_formats,
            0);
param è un array di 11 stringhe
param_length DOVREBBE essere un array di 11 lunghezze (le lunghezze delle stringhe appunto)
param_formats è un array di 11 "1" che indica che i dati che inserisco sono binari
__________________
firma in progress
deggial è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine NL-LC1 è il primo dissipatore a liquido A...
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con ...
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming Gigabyte MO32U24 OLED: il 4K a 240Hz su un panne...
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh Recensione realme 16 5G: lo smartphone con Selfi...
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni Come rispettare tutte le nuove regole per i mono...
XBOX, terremoto in vista: incerto il fut...
Salesforce compra Fin per 3,6 miliardi d...
Tenstorrent potrebbe finire nelle mani d...
Beatbot porta la manutenzione smart in p...
Microsoft potrebbe introdurre pagamenti ...
LiteLLM, tre falle critiche: la catena d...
Servizi cloud su iOS, l'Antitrust italia...
Arch Linux: oltre 1.900 pacchetti AUR in...
Le frodi finanziarie valgono quanto il P...
Electronic Arts presenta EA Advertising ...
Addio silicio? Imec, ASML e TSMC mostran...
iPhone Ultra: rimandato e costosissimo? ...
Huawei punta sul segmento dei computer: ...
ChatGPT non si ferma mai: superato il mi...
OPPO Find X10 Pro promette bene: tante n...
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: 10:22.


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