Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Google ha appena rinnovato la sua celebre serie A con il Pixel 10a, lo smartphone della serie più conveniente se consideriamo il rapporto tra costo e prestazioni. Con il chip Tensor G4, un design raffinato soprattutto sul retro e l'integrazione profonda di Gemini, il colosso di Mountain View promette un'esperienza premium a un prezzo accessibile. E il retro non ha nessuno scalino
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026
Al MWC Qualcomm annuncia una coalizione industriale per lanciare il 6G entro il 2029 e introduce agenti IA per la gestione autonoma della RAN. Ericsson, presente sul palco, conferma la direzione: le reti del futuro saranno IA-native fin dalla progettazione
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso
CHUWI CoreBook Air è un ultraleggero da 1 kg con Ryzen 5 6600H, display 14" 16:10 e 16 GB LPDDR5. Offre buona portabilità, autonomia discreta e costruzione in alluminio, ma storage PCIe 3.0 e RAM saldata limitano l'espandibilità. A 549 euro sfida brand più noti nella stessa fascia di mercato.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 31-08-2012, 09:34   #1
Dhavamba
Junior Member
 
Iscritto dal: Sep 2008
Messaggi: 15
[C] Segmentation fault (core dumped)

Salve ho un problema in questo codice, l'errore è:
Segmentation fault (core dumped)

Metto solo un pezzo del codice perchè l'errore l'ho individuato e si trova nella stringa:

scanf("\n%c",&item);

Però non capisco il motivo visto che il metodo richiede quei parametri, perchè l'esecuzione mi dà questo errore???



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

struct listNode {
	char data;
	struct listNode *nextPtr;
	};
	
typedef struct listNode ListNode;
typedef ListNode *ListNodePtr;

void insert (ListNodePtr*sPtr, char value);
char delete (ListNodePtr*sPtr, char value);
int isEmpty (ListNodePtr sPtr);
void printList(ListNodePtr currentPtr);
void instruction(void);

int main()
{
	ListNodePtr startPtr = NULL;
	int choice;
	char item;
	
	
	instruction();
	printf("? ");
	scanf("%d", &choice);
	
	while(choice != 3) {
		switch(choice) 
		{
			case 1:
			printf("Enter a character: ");
			scanf("\n%c",&item);
			insert(&startPtr, item);
			printList(startPtr);
			break;
......

comunque, non sò se può servire, ecco il sorgente completo

Codice:

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

struct listNode {
	char data;
	struct listNode *nextPtr;
	};
	
typedef struct listNode ListNode;
typedef ListNode *ListNodePtr;

void insert (ListNodePtr*sPtr, char value);
char delete (ListNodePtr*sPtr, char value);
int isEmpty (ListNodePtr sPtr);
void printList(ListNodePtr currentPtr);
void instruction(void);

int main()
{
	ListNodePtr startPtr = NULL;
	int choice;
	char item;
	
	
	instruction();
	printf("? ");
	scanf("%d", &choice);
	
	while(choice != 3) {
		switch(choice) 
		{
			case 1:
			printf("Enter a character: ");
			scanf("\n%c",&item);
			insert(&startPtr, item);
			printList(startPtr);
			break;
			
			case 2:
			if ( !isEmpty( startPtr ) ) {
				printf("Enter character to be deleted: ");
				scanf("\n%c",&item);
				if (delete(&startPtr, item)) {
					printf("%c deleted.\n",item);
					printList(startPtr); }
				else {
					printf("%c not found.\n\n", item); }
				}
			else printf("List is empty.\n\n");
			
			break;
			
			default:
			printf("invalid choice.\n\n");
			instruction();
			break;
		}
		printf("?");
		scanf("%d", &choice);
	}
	
	printf("End of Run.\n");
	return 0;
}

void instruction(void)
{
	printf("Enter your choice:\n"
	       "1 to insert an element into the list.\n"
	       "2 to delete an element from the list.\n"
	       "3 to end.\n");
}

void insert(ListNodePtr *sPtr, char value)
{
	ListNodePtr newPtr;
	ListNodePtr previousPtr;
	ListNodePtr currentPtr;
	
	newPtr = malloc(sizeof(ListNode));
	
	if ( newPtr != NULL) {
		newPtr->data = value;
		newPtr->nextPtr = NULL;
		currentPtr = *sPtr;
		
		while (currentPtr != NULL && value > currentPtr->data) {
			previousPtr = currentPtr;
			currentPtr = currentPtr->nextPtr;
		}
		if ( previousPtr == NULL) {
			newPtr->nextPtr = currentPtr; }
			else {
				previousPtr->nextPtr = currentPtr;
				newPtr->nextPtr = currentPtr; }
				}
	else printf("%c not inserted.No memory available.\n",value);
}

char delete(ListNodePtr *sPtr, char value) 
{
	ListNodePtr tempPtr;
	ListNodePtr previousPtr;
	ListNodePtr currentPtr;
	
	if(value == (*sPtr)->data) {
		tempPtr = *sPtr;
		*sPtr = (*sPtr)->nextPtr;
		free(tempPtr);
		return value; }
	else {
		previousPtr = *sPtr;
		currentPtr = (*sPtr)->nextPtr;
		while (currentPtr != NULL && currentPtr->data != value) {
			previousPtr = currentPtr;
			currentPtr = currentPtr->nextPtr; }
			if (currentPtr != NULL) {
				tempPtr = currentPtr;
				previousPtr->nextPtr = currentPtr->nextPtr;
				free(tempPtr);
				return value; }
			}
	return '\0';
}

int isEmpty(ListNodePtr sPtr)
{
	return sPtr == NULL;
}

void printList(ListNodePtr currentPtr) 
{
	if (currentPtr == NULL) printf("List is Empty.\n\n");
	else {
		printf("The list is:\n");
		while(currentPtr != NULL) {
			printf("%c --> ", currentPtr->data);
			currentPtr = currentPtr->nextPtr; }
		printf("NULL.\n\n");
	}
}

Ultima modifica di Dhavamba : 31-08-2012 alle 09:38.
Dhavamba è offline   Rispondi citando il messaggio o parte di esso
Old 31-08-2012, 14:10   #2
__ZERO_UNO__
Member
 
L'Avatar di __ZERO_UNO__
 
Iscritto dal: Jul 2009
Città: Milano
Messaggi: 270
Ho provato a compilare con GCC e funziona (non proprio, l'inserimento non funziona correttamente). Comunque, ti consiglio di provare a mettere le parentesi per ogni case. Quindi

Codice:
switch (...) {
  case 1: {

  }
  case 2: {

  } 

 ...
}
__________________

AMD PII x4 955 BE | Sapphire HD4850 Vapor-X 1 GB | Samsung SpinPoint F1 500GB | Samsung EcoGreen F4 2TB
Gigabyte GA-MA790FXT-UD5P | Fractal Design Define R3 USB3.0 Titanium Grey | CORSAIR 650W CMPSU-650TX
Noctua U12P SE2 | 2 x 2GB Kingston 1333 MHz | Samsung SyncMaster P2450 | Samsung SyncMaster T200
__ZERO_UNO__ è offline   Rispondi citando il messaggio o parte di esso
Old 03-09-2012, 06:21   #3
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
No, l'errore non e' li', ma nell'inserimento seguente: nella insert() cerchi di scandire la lista per cercare l'ultimo elemento ed appendere in coda.
Il ciclo while non verra' quindi mai eseguito; come risultato non assegni alcun valore alla variabile previousPtr, salvo poi utilizzarla. E questo fa arrabbiare il computer

Ovviamente la soluzione e' semplice, basta inizializzare previousPtr a NULL prima del ciclo

Codice:
void insert(ListNodePtr *sPtr, char value)
{
	ListNodePtr newPtr;
	ListNodePtr previousPtr;
	ListNodePtr currentPtr;
	
	newPtr = (ListNodePtr)malloc(sizeof(ListNode));	// MEGI add cast
	
	if ( newPtr != NULL) {
		newPtr->data = value;
		newPtr->nextPtr = NULL;
		currentPtr = *sPtr;
		
                /* A lista vuota non entri qui! */
		while (currentPtr != NULL && value > currentPtr->data) {
			previousPtr = currentPtr;
			currentPtr = currentPtr->nextPtr;
		}
                /* quindi, qui previousPtr non ha alcun valore *.
		if ( previousPtr == NULL) {
			newPtr->nextPtr = currentPtr; }
			else {
				previousPtr->nextPtr = currentPtr;
				newPtr->nextPtr = currentPtr; }
				}
	else printf("%c not inserted.No memory available.\n",value);
}
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026 6G, da rete che trasporta dati a rete intelligen...
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso CHUWI CoreBook Air alla prova: design premium, b...
Roborock Saros 20: il robot preciso e molto sottile Roborock Saros 20: il robot preciso e molto sott...
ASUS ROG Kithara: quando HIFIMAN incontra il gaming con driver planari da 100mm ASUS ROG Kithara: quando HIFIMAN incontra il gam...
Rocket Lab ha posticipato il lancio del ...
Dalla missione Artemis IV il razzo spazi...
Una delle sonde europee di ESA Proba-3 h...
Un modder fa girare Linux su PS5: GTA V ...
MacBook Neo: nessuna sorpresa nei primi ...
La serie POCO X8 Pro è pronta al ...
Smartphone: 2026 difficile per il mercat...
Star Wars: Knights of the Old Republic R...
Huang, NVIDIA: OpenClaw ha realizzato in...
Annunciano il recupero di 4,8 milioni di...
Oggi degli ottimi auricolari Sony con ca...
Muffa in casa? Questo deumidificatore da...
Sonos Era 100: il punto d'ingresso per u...
"Non stiamo sostituendo nessuno con...
Tutti i robot in offerta ora: prezzi bas...
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: 02:16.


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