The UNIX and Linux Forums  
Hallo und herzlich Willkommen aus den Vereinigten Staaten, die UNIX-und Linux-Foren! Vielen Dank für Ihren Besuch und die Teilnahme an unserem Global Community.

Go Back   Die UNIX-und Linux-Foren > Top Foren > High-Level-Programmierung
.
Google unix.com



High-Level-Programmierung Post Fragen zu C, C + +, Java, SQL, und andere Programmiersprachen hier.

Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
Faden Thread Starter Forum Antworten Last Post
Welche Base Level Filesets benötigen ein bestimmtes Programm? cypher82 UNIX für Fortgeschrittene und Experten 4 05-29-2008 09:07 AM
Hilfe zu C-Programm dwgi32 High-Level-Programmierung 2 11-19-2007 10:44 AM
Weird an Betriebsstrukturerhebung und VGs mhenryj AIX 4 11-13-2007 04:42 PM
Weird Ergebnisse mit awk amatheny Shell Programmierung und Scripting 2 11-01-2007 06:12 PM
Weird Nachricht? lesstjm UNIX for Dummies Questions & Answers 6 01-04-2002 10:01 AM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Suche diesen Thread Rate Thread Anzeige-Modi
  #1 (permalink)  
Old 11-14-2007
karthikb23 karthikb23 is offline
Registrierte Nutzer
  
 

Join Date: Nov 2007
Beiträge: 18
Weird C-Programm. Help Needed

Hi,
Bitte lesen Sie hierzu folgendermaßen vor:
Wenn ich eine Erklärung:

char * i, j [15], * k;
und dann
sprintf (k, "print.sh% s", i);

das Programm funktioniert.

Aber wenn ich die Erklärung:
char * i, * k;
und dann
sprintf (k, "print.sh% s", i);
Ich ein segmentation fault auf der "sprintf" Erklärung.

Das Programm funktioniert nur, wenn j ist ein Array von 15. Nichts weniger / mehr

Bitte beachten Sie: Variable j ist nur ein Dummy. Ich habe absolut nichts mit ihm.
Auch weiß ich, mit sprintf die Art, wie ich getan haben, ist illegal. Der Zeiger ist nicht für alles, vor einer solchen Erklärung.

Es kann dumm aber bitte jemand erklären, warum dies geschieht? Raten Sie mal etwas zu tun mit der Art und Weise Speicher zugeordnet ist.

Vielen Dank im Voraus!
  #2 (permalink)  
Old 11-14-2007
Portier porter is offline Forum Advisor  
Registrierte Nutzer
  
 

Join Date: Jan 2007
Beiträge: 2965
Sie versuchen zu schreiben, um zufällige Speicher als "k" ist nicht darauf an etwas. Der Kernel kann Ihnen drei Antworten ...

(a) Sie tun es

(b) fallen, weil Sie sich schriftlich an Read Only Memory, z. B. das Programm Bild

(c) fallen, weil Sie schreiben in den Speicher, die nicht für Sie
  #3 (permalink)  
Old 11-14-2007
karthikb23 karthikb23 is offline
Registrierte Nutzer
  
 

Join Date: Nov 2007
Beiträge: 18
Nun, auf der obigen Zeilen, ich könnte weitere ableiten:

1. in einem Fall, T, die auf stdout (dont know how!), coz Speicher waren, dass der Inhalt meiner printf-Anweisung, die vor dem sprintf. (Überraschende!)

2. In einem Fall, T, die auf der String Teil meiner sprintf Erklärung. Daher noch einmal: Es ist nicht illegal, und das Programm funktionieren würde. (Scheint möglich zu sein).

Allerdings ist diese Art von Müll Initialisierungen gültig, aber offenbar nur geschehen, wenn Variable j erklärt wird. Else, hält das Programm von SEGV.

Aber ich glaube, dies ist ein besonderer und einmaliger Fall. Erraten Sie die gleiche Code funktioniert nicht auf einem anderen Rechner. (Mine ist Solaris).

Alle Kommentare / Eingänge / weitere Einblicke anyone?
  #4 (permalink)  
Old 11-14-2007
Portier porter is offline Forum Advisor  
Registrierte Nutzer
  
 

Join Date: Jan 2007
Beiträge: 2965
Der Stapel ist, dass die Haupt-mit werden nicht unberührt Virgin Speicher, wird es verwendet wurden für Unterprogramm-Aufrufe, ob durch das Programm der Prolog, dh crt0.o (oder was auch immer) vor der main () aufgerufen.

Der Speicher ist in der Tat in einem unbekannten Zustand, aber ich nehme Ihren Hinweis auf den Inhalt als wiederholbare, unter bestimmten Bedingungen. Ich würde es einen Fall von Deja-vu.
  #5 (permalink)  
Old 11-14-2007
karthikb23 karthikb23 is offline
Registrierte Nutzer
  
 

Join Date: Nov 2007
Beiträge: 18
zustimmen . In wiederholten läuft das Programm Variablen werden die gleichen Speicherplatz.
Auch beim Lesen in einer sehr großen String (20 Zeichen) und senden es an sprintf, es ist erstaunlich, wie es keine segmentation fault.

An einem gewissen Punkt, es sei denn, 'K' ist, die auf stdout, die Länge der Speicher sollte Verletzung verursachen, und sollte sich SEGV Recht?

Auch, wenn überhaupt "k" auf stdout, durch eine bündig sofort, ich sollte den Inhalt des "k" Recht? coz könnte überschreiben vorherige Inhalt von stdout.
  #6 (permalink)  
Old 11-14-2007
Portier porter is offline Forum Advisor  
Registrierte Nutzer
  
 

Join Date: Jan 2007
Beiträge: 2965
Zitat:
Zitat von karthikb23 View Post
Auch, wenn überhaupt "k" auf stdout, durch eine bündig sofort, ich sollte den Inhalt des "k" Recht? coz könnte überschreiben vorherige Inhalt von stdout.
Versuchen Sie und sehen Sie ...?

Sind Sie laufen unter gdb und sehen, wo es wirklich geht?
  #7 (permalink)  
Old 11-14-2007
n1djs n1djs is offline
Registrierte Nutzer
  
 

Join Date: Nov 2007
Beiträge: 12
Smile Weird C-Programm. Help Needed

Sie haben ein Problem in beiden Fällen. Man ist gefangen, der andere nicht.
"char * i, j [15], * k", sagt die folgenden:
Point-to-Call-Speicher und die Zeiger i;
Platz im Speicher zu 15 Zeichen, dass die Raum-und Call-j;
und zeigen Sie auf Speicher und fordern, dass die Zeiger k;

Wenn Sie versuchen zu tun, "sprintf (k," print.sh% s ", i);" Sie fordern die Computer zu halten, die die Zeichenkette "print.sh?" in den Speicher für Sie auf den Zeiger mit Variable k. Ihr Problem ist, dass Sie nicht alle, die Speicherplatz für die Zeichenfolge an der Lage der Zeiger K, K ist derzeit nur, die auf einige zufällige Speicher und kein Platz zugewiesen worden ist, um etwas auf die Speicherstelle, auf die K.

Das ist der Grund, es stirbt. Der Grund ist doensn't die (noch) in dem Beispiel, wo j zugeordnet ist Raum, ist, dass es zumindest etwas Platz auf der Stack, und k ist wahrscheinlich versehentlich darauf gibt, und daher j korrumpieren, aber nicht zu einer SEGV (noch).

Ich schlage vor, Sie gehen Studie über die Unterschiede auf * k, k [10], K [10,10] und ** k. Wenn Sie verstehen, was diese verschiedenen Formen bedeuten, Systemadministrator Sie haben eine wesentlich bessere Tag.
Closed Thread

Lesezeichen

Thread Tools Suche diesen Thread
Suche diesen Thread:

Erweiterte Suche
Anzeige-Modi Rate this thread
Rate this thread:

Forumregeln
Du möglicherweise nicht neue Themen
Du möglicherweise nicht nach Antworten
Du möglicherweise nicht post-Anlagen
Du möglicherweise nicht bearbeiten Sie Ihre Beiträge

BB-Code ist Auf
Smilies sind Auf
[IMG] Code Auf
HTML-Code ist Aus
Trackbacks sind Auf
Pingbacks sind Auf
Refbacks sind Auf




Alle Zeiten sind GMT -4. Es ist jetzt 07:31 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Ltd. Sprachliche Übersetzungen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Die UNIX-und Linux-Foren Content © Copyright 1993-2009. Alle Rechte Reserved.Ad Management von RedTyger

Content Relevant URLs durch vBSEO 3.2.0