Rob Bowden: Hallo, ich bin Rob Bowden, und lassen Sie uns über quiz0 sprechen.
>> Also, erste Frage.
Das ist die Frage, wo Sie den Zahlencode erforderlich
127 in der binären Lampen.
Wenn Sie wollten, könnten Sie tun die regelmäßige Konvertierung
von bi-- oder von dezimal in binär.
Aber das wird wahrscheinlich eine Menge Zeit in Anspruch nehmen.
Ich meine, man könnte herausfinden, dass, OK, 1 ist drin, 2 ist drin,
4 ist da drin, 8 ist da drin.
Einfacheren Weg, 127 128 minus eins.
Das am weitesten links Glühbirne ist die 128-Bit.
Also 127 ist wirklich nur alle der anderen Glühbirnen,
denn das ist die am weitesten links Glühbirne minus 1.
Das war es für diese Frage.
>> Frage eins.
Also mit 3 Bits können stellen 8 unterschiedlichen Werte.
Warum also ist 7 der größten nicht-negative ganze Dezimalzahl Sie Betreiber können?
Nun, wenn wir nur stellen 8 unterschiedliche Werte,
dann, was wir zu sein repräsentiert ist 0 bis 7.
0 nimmt einen der Werte.
>> Frage zwei.
Mit n Bits, wie viele unterschiedliche Werte vertreten Sie?
Also, mit n Bits, haben Sie 2 möglichen Werte für jedes Bit.
So haben wir 2 mögliche Werte für das erste Bit, 2 mögliche Werte
für den zweiten, 2 möglich für den dritten.
Und das ist also 2 mal 2 mal 2, und schließlich ist die Antwort auf den 2 n.
>> Frage drei.
Was ist in der 0x50 binär?
Also denken Sie daran, dass Hexadezimal hat ein sehr unkomplizierte Umstellung auf binär.
Also hier, wir müssen nur zum Anschauen die 5 und die 0 unabhängig.
Also, was ist 5 binär?
0101, das ist der 1-Bit und das 4-Bit.
Was ist 0 binär?
Nicht schwierig.
0000.
Also einfach legte sie zusammen, und das ist die volle Zahl binär.
01.010.000.
Und wenn man wollte konnte man Entfernen Sie diesen ganz links Null.
Es ist irrelevant.
>> So dann alternativ was ist 0x50 in Dezimal?
Wenn Sie wollten, could-- Sie, wenn Sie komfortabler mit dem binären,
Sie könnten, dass binäre Antwort nehmen und konvertieren, dass in dezimal.
Oder wir nur daran erinnern könnte dass hexadezimal.
0, so dass sich in der 0-ten Stelle und die 5 ist in der 16 zu dem ersten Platz.
Also hier haben wir 5 mal 16 zu den Zuerst plus 0 mal 16 auf den Null,
80.
Und wenn man sich die gesuchte Titel auf die Frage,
es war CS 80, die ein bisschen eine war Hinweis auf die Antwort auf dieses Problem.
>> Frage fünf.
Wir haben diese Scratch-Skript, das ist Wiederholen 4 mal Erdnussbutter-Gelee.
Wie können wir also jetzt, dass Code in C?
Nun, wir haben hier-- das Teil fett ist der einzige Teil, den Sie umsetzen musste.
So haben wir eine 4-Schleife, die Schleife ist 4 Zeiten, printf-ing Erdnussbutter-Gelee,
mit neuen Linie wie das Problem fragt nach.
>> Frage sechs, ein anderer Scratch Problem.
Wir sehen, dass wir in einer Endlosschleife sind.
Wir sagen die Variable i und dann Inkrementieren i um 1.
Jetzt zu tun, dass in C. Es gibt wollen wir mehrere Möglichkeiten, wir könnten dies getan haben.
Hier trafen wir den Code forever-Schleife als while (true).
So erklären wir die Variable I, nur wie wir hatten Variable i in Scratch.
Deklarieren Sie die Variable i, und für immer while (true), sagen wir die Variable i.
So printf% i-- oder man könnte% d benutzt habe.
Wir sagen, dass variable und dann erhöhe ihn, ++ i.
>> Frage sieben.
Nun zu etwas ganz Ähnliches tun wollen wir Mario dot c von der Problem gesetzt ein.
Wir wollen diese Hashtags zu drucken, wir eine fünf ausdrucken möchten
durch drei Rechteck dieser Hashes.
Also, wie sollen wir das tun?
Nun, geben wir Ihnen eine ganze Reihe von Code, und Sie müssen nur
müssen in der Druckrasterfunktion auszufüllen.
>> Also, was bedeutet Printgrid aussehen?
Nun, Sie Vergangenheit sind Breite und Höhe.
So haben wir eine Außen 4 Schleife, das ist Looping
über alle Zeilen davon Gitter, die wir ausdrucken möchten.
Dann haben wir die inter verschachtelten 4 Schleife das ist das Drucken über jede Spalte.
Also für jede Zeile, die wir für den Druck wobei jede Spalte ein einzelner Hash.
Dann am Ende der Zeile drucken wir ein einzelne neue Zeile in die nächste Zeile zu gehen.
Und das ist es für das gesamte Netz.
>> Frage acht.
Eine Funktion wie Printgrid auf der haben einen Nebeneffekt, aber nicht eine Rückkehr
Wert.
Erklären Sie den Unterschied.
Also diese stützt sich auf Sie erinnern was ein Nebeneffekt ist.
Nun, eine Rückkehr value-- wir wissen, Printgrid nicht
haben Rückgabewert, da hier heißt es nichtig.
Also alles, die void zurück nicht wirklich etwas zurück.
Also, was ist die Nebenwirkung?
Nun, das ist eine Nebenwirkung alles, was Art von fortbesteht
nach dem Ende der Funktion das war nicht gerade zurückgekehrt,
und es war nicht nur von den Eingängen.
>> So zum Beispiel könnten wir Ändern einer globalen Variablen.
Das wäre ein Nebeneffekt.
In diesem besonderen Fall wird ein sehr wichtiger Nebeneffekt
wird das Drucken auf dem Bildschirm.
So daß ein Nebeneffekt dass Printgrid hat.
Wir drucken diese Dinge auf den Bildschirm.
Und Sie denken können dass als Nebeneffekt,
denn das ist etwas, weiterhin besteht, nachdem diese Funktion endet.
Das ist etwas außerhalb des Geltungsbereichs Diese Funktion, die letztlich
wird verändert, die Inhalt des Bildschirms.
>> Frage neun.
Betrachten Sie das folgende Programm, auf die Zeilennummern
Für Liebhaber von um der Diskussion willen.
Also in diesem Programm, das wir gerade sind Aufruf GetString, Speicherung
In dieser Variable s, und dann Drucken diese Variable s.
Ok.
So erklären, warum Linie eine vorhanden ist.
#include CS50 dot h.
Warum brauchen wir den CS50 dot h # include?
Nun rufen wir die GetString Funktion
und GetString definiert in der CS50-Bibliothek.
Also, wenn wir nicht #include CS50 dot h,
wir würden diese implizite Deklaration bekommen der GetString Funktionsfehler
vom Compiler.
Also müssen wir die library-- gehören wir brauchen, um die Header-Datei enthalten,
oder aber der Compiler nicht erkennen, dass GetString existiert.
>> Erklären Sie, warum Zeile zwei vorhanden ist.
Also Standard io dot h.
Es ist genau das gleiche wie das vorherige Problem,
außer, anstatt sich mit GetString, reden wir über printf reden.
Also, wenn wir nicht sagen, wir brauchen Standard io dot h gehören,
dann würden wir nicht in der Lage sein, die printf Funktion zu nutzen,
Da der Compiler würde es nicht wissen.
>> Why-- was ist die Bedeutung void in der vierten Zeile?
Hier haben wir also int main (void).
Das ist nur zu sagen, dass wir sind nicht immer alle Befehlszeile
Argumente zur Haupt.
Bedenken Sie, dass wir sagen, int Haupt int argc String argv Klammern.
Also hier haben wir nur sagen nichtig wir sagen ignorieren Befehlszeilenargumente.
>> Erklären Sie, in Bezug auf Speicher, genau was GetString in Reihensechs Renditen.
GetString zurückkehrt einen Block von Speicher, eine Anordnung von Zeichen.
Es ist wirklich der Rückkehr ein Zeiger auf das erste Zeichen.
Bedenken Sie, dass ein String eine char Stern.
So s ist ein Zeiger auf das erste Charakter in welcher die Saite
dass der Benutzer an der Tastatur eingegeben.
Und das Speicher passiert malloced werden, so dass der Speicher im Heap.
>> Frage 13.
Betrachten Sie das folgende Programm.
Also all das Programm tut wird printf-ing 1 geteilt durch 10.
Also, wenn kompiliert und ausgeführt wird, dieses Programm
Ausgänge 0.0, obwohl 1 geteilt durch 10 ist 0,1.
Also warum ist es 0.0?
Nun, das ist, weil von Integer-Division.
So 1 eine ganze Zahl ist, 10 eine ganze Zahl ist.
Also 1 geteilt durch 10, alles wird als Ganzzahlen behandelt,
und in C, wenn wir Ganzzahl-Division zu tun, Wir kürzen jede Dezimalstelle.
Also 1 geteilt durch 10 0, und dann versuchen wir,
zu drucken als Schwimmer, so Null als Schwimmer gedruckt ist 0,0.
Und das ist, warum wir 0,0.
>> Betrachten Sie das folgende Programm.
Jetzt sind wir Druck 0,1.
Also keine Integer-Division, wir sind nur Druck 0,1,
aber wir sind ihn zu drucken bis 28 Dezimalstellen.
Und wir bekommen dies 0,1000, eine ganze Reihe von Nullen, 5 5 5, blah blah blah.
So ist die Frage hier ist, warum tut es gedruckt, daß anstelle von genau 0,1?
>> So ist der Grund, jetzt hier Gleitkomma Ungenauigkeit.
Bedenken Sie, dass ein Schwimmer nur 32 Bit.
So können wir eine endliche Anzahl nur darstellen von Fließkommazahlen mit jenen 32
Bits.
Nun gibt es letztlich unendlich viele Fließkommawerte,
und es gibt unendlich viele schwimm Punktwerte zwischen 0 und 1,
und wir sind offensichtlich in der Lage, stellen noch mehr Werte als die.
Also müssen wir Opfer zu machen in der Lage, die meisten Werte darstellen.
>> Also ein Wert wie 0,1, offenbar können wir nicht garantieren, dass genau.
Also statt repräsentieren 0,1 wir tun das besten können wir diese 0.100000 5 5 stellen
5.
Und das ist ziemlich nahe, aber für eine Vielzahl von Anwendungen
Sie haben Grund zur Sorge Gleitkomma Ungenauigkeit,
weil wir einfach nicht darstellen kann alle schwebenden Punkte genau.
>> Frage 15.
Betrachten Sie den Code unten.
Wir stehen noch am Drucken 1 plus 1.
Also gibt es keinen Trick.
1 plus 1 bis 2 bewertet, und dann sind wir den Druck, dass.
Dies druckt nur 2.
>> Frage 16.
Jetzt sind wir Druck den Charakter 1 plus der Charakter ein.
Also warum tut dies nicht drucken Sie die gleiche Sache?
Nun, die Zeichen 1 plus der Charakter 1, der Charakter 1 hat ASCII-Wert 49.
Das ist also wirklich sagen, 49 zzgl 49, und letztlich wird dies Drucklegung 98.
Also das wird nicht gedruckt 2.
>> Frage 17.
Abschließende Umsetzung ungeradzahliger unten derart
dass die Funktion liefert true, wenn n ungerade ist und false, wenn n gerade ist.
Dies ist ein großes Ziel für den Mod-Operator.
Also nehmen wir unser Argument n, wenn n mod 2 gleich 1 ist, auch
das bedeutet, dass n geteilt von 2 hatte eine Rest.
Wenn n durch 2 geteilt hatte einen Rest, dass bedeutet, dass n ungerade ist, so dass wir return true.
Else wir return false.
Sie könnten auch n getan haben mod 2 equals Null, return false, sonst true zurückgeben.
>> Betrachten Sie das folgende rekursive Funktion.
So dass, wenn n kleiner als oder gleich 1, 1 zurückzukehren,
andernfalls kehren n mal f von n minus 1.
Also, was ist diese Funktion?
Nun, das ist nur die Fakultätsfunktion.
Dies ist schön dargestellt wie n Fakultät.
>> Also Frage 19 jetzt, wir wollen nehmen diese rekursive Funktion.
Wir wollen, dass es iterative zu machen.
Wie können wir also tun?
Gut gerüstet für die Mitarbeiter Lösung und wiederum gibt es
mehrere Möglichkeiten, wie Sie getan haben könnte dass, beginnen wir mit diesem Produkt int
gleich 1 ist.
Und in der gesamten for-Schleife, wir gehen
zu werden Multiplizieren Produkt letztendlich am Ende mit der vollfaktorielle.
Also für int i gleich 2 ist, ist i weniger als oder gleich n, i ++.
>> Sie fragen sich vielleicht, warum ich gleich 2.
Nun, daran erinnern, dass hier müssen wir sicherzustellen, dass unsere Basisfall richtig ist.
So dass, wenn n kleiner als oder gleich ist 1, sind wir nur zurück 1.
Also hier, beginnen wir bei i gleich 2.
Nun, wenn ich ein, dann the-- oder wenn n waren 1, dann ist die for-Schleife
würde überhaupt nicht auszuführen.
Und so einfach würden wir Return-Produkt, das 1 ist.
In ähnlicher Weise wurden, wenn n etwas weniger als 1--
wenn es 0, negativ waren 1, whatever-- wir immer noch zurückkehren 1,
das ist genau das, was das ist rekursive Version tut.
>> Nun, wenn n größer ist als 1 ist, dann werden wir
zu tun zumindest eine Iteration dieser Schleife.
Also sagen wir mal n 5, dann sind wir werde Produkt mal tun gleich 2.
So, jetzt Produkt ist 2.
Jetzt werden wir zu tun Produkt mal gleich 3.
Jetzt ist es 6.
Produkt mal gleich 4, jetzt ist es 24.
Produkt mal gleich 5, jetzt ist es 120.
Also letztendlich, wir Rückkehr 120, die richtig 5 Fakultät ist.
>> Frage 20.
Dies ist die eine, wo Sie zu füllen in dieser Tabelle mit einem bestimmten Algorithmus,
alles, was wir gesehen haben, dass passt Diese algorithmischen Lauf
Male diese asymptotische Laufzeiten.
Also, was ist ein Algorithmus, ist Omega von 1, aber groß O von n?
So könnte es unendlich sein viele Antworten hier.
Die eine, die wir wohl je gesehen habe Häufig ist nur lineare Suche.
>> Also im besten Fall Szenario: Der Artikel wir sind
suche, ist bei der Anfang der Liste
und so an Omega von 1 Schritten, das erste, was wir zu überprüfen,
wir einfach sofort zurück dass wir das Einzelteil fanden.
Im schlimmsten Fall, der Artikel ist am Ende,
oder der Artikel nicht in der Liste überhaupt nicht.
Also müssen wir suchen die gesamte Liste, die alle n
Elemente, und das ist, warum es o n.
>> So jetzt ist es etwas, das sowohl die Omega von n log n, und große O von n log n.
Nun, die meisten relevanten Sache wir haben hier zu sehen ist Mergesort.
So Mergesort, denken Sie daran, ist letztlich Theta
n log n, wobei Theta definiert ist, wenn beide Omega und große O sind die gleichen.
Sowohl n log n.
>> Was ist etwas, das Omega N und O n quadriert?
Nun, es gibt wieder mehrere mögliche Antworten.
Hier passieren wir sagen Bubble Sort.
Insertion Sort würde auch hier zu arbeiten.
Beachten Sie, dass Bubble-Sort hat, dass die Optimierung, wo,
wenn Sie in der Lage zu bekommen sind durch die gesamte Liste
ohne zu tun alle Swaps, dann, na ja,
können wir sofort zurück, dass die Liste wurde sortiert, um mit anzufangen.
Also im besten Fall es ist nur omega n.
Wenn es ist nicht nur ein schön sortierte Liste zu beginnen,
dann haben wir O n quadriert Swaps.
Und schließlich haben wir Selection Sort für n quadriert, sowohl Omega und große O.
>> Frage 21.
Was ist in der Integer-Überlauf?
Nun wieder, ähnlich wie früher, wir haben nur endlich viele Bits
eine ganze Zahl darstellen, so vielleicht 32 Bit.
Sagen wir, wir haben eine Ganzzahl mit Vorzeichen.
Dann schließlich die höchste positive Zahl, die wir vertreten können
2 bis die 31 minus 1.
Also, was passiert, wenn wir versuchen, dann erhöhen, die ganzzahlige?
Nun, wir gehen von 2 bis 31 gehen minus 1, den ganzen Weg hinunter zu negativen 2
zum 31.
Also das Integer-Überlauf ist wenn Sie halten Inkrementieren
und letztlich kann man nicht get any höher und es ist nur
wickelt den ganzen Weg zurück um, um einen negativen Wert.
>> Wie wärs mit einem Pufferüberlauf?
So ein Puffer overflow-- daran erinnern, was ein Puffer.
Es ist nur ein Teil des Speichers.
So etwas wie ein Array ist ein Puffer.
So ein Pufferüberlauf ist, wenn Sie versuchen, Speicher zugreifen
über das Ende des Arrays.
Also, wenn Sie eine haben Array der Größe 5 und Sie
versuchen, Array Halterung zugreifen 5 oder 6 oder Halterung Konsole 7,
oder irgendetwas über die Ende oder sogar etwas
below-- Array Halterung negativen 1-- alle von denen sind Pufferüberläufe.
Du berühren Speicher in schlechte Wege.
>> Frage 23.
Also in diesem, die Sie brauchen zu implementieren strlen.
Und wir sagen euch, dass man nehmen s wird nicht null sein,
so dass Sie nicht zu haben, Führen Sie einen Scheck über null.
Und es gibt mehrere Möglichkeiten, Sie könnte das getan haben.
Hier nehmen wir eben die unkompliziert.
Wir beginnen mit einem Zähler, n. n ist Zählen, wie viele Zeichen sind da.
Also wir beginnen bei 0, und dann werden wir Iteration über die gesamte Liste.
>> Ist s Halterung 0 gleich der Nullabschluss Charakter?
Angemeldet wir suchen das Nullabschlusszeichen
um festzustellen, wie lange unsere String ist.
Das wird zu kündigen alle relevanten String.
Also ist s Halterung 0 gleich zum Nullabschluss?
Wenn es nicht, dann sind wir zu gehen Blick auf s Winkel 1, s Halterung 2.
Wir halten, bis wir finden Sie das Nullabschluss.
Sobald wir es gefunden haben, dann n enthält die Gesamtlänge der Zeichenkette,
und wir können nur zurückgeben, dass.
>> Frage 24.
Das ist also die eine, wo man haben, um den Handel zu machen ab.
So eine Sache ist gut in einem Weise, aber in welcher Weise ist es schlecht?
Also hier, Mergesort neigt dazu, schneller als Bubble-Sort.
Nachdem dass-- gut gesagt, es mehrere Antworten hier.
Aber der Hauptgrund ist, dass Bubble-Sort ist Omega der n für eine sortierte Liste.
>> Beachten Sie, dass Tisch wir gerade vorhin gesehen.
So blase sortiert Omega n, die besten Fall
ist es in der Lage, gehen Sie einfach über die Liste einmal, bestimmen
hey das ist jetzt schon sortiert, und zurück.
Merge sort, egal, was Sie tun, ist Omega von n log n.
Also für sortierte Liste, bubble Art geht, schneller zu sein.
>> Was ist nun mit verknüpften Listen?
So kann eine verkettete Liste wachsen und schrumpfen so viele Elemente wie erforderlich passen.
Nachdem dass-- so genannten meist der direkte Vergleich
sein wird ein verknüpftes Liste mit einem Array.
Also auch wenn Arrays leicht wachsen und schrumpfen
so viele Elemente passen nach Bedarf, eine verkettete Liste
im Vergleich zu einem array-- ein Array mit wahlfreiem Zugriff.
Wir können Index in einem besondere Element des Arrays.
>> Also für eine verkettete Liste, können wir nicht nur um das fünfte Element zu gehen,
Wir müssen von Anfang queren bis wir mit dem fünften Element.
Und das wird uns daran hindern etwas wie binäre Such tut.
Apropos binäre Suche, binäre Suche neigt schneller als lineare Suche zu sein.
Nachdem dass-- sagte so ist eine mögliche Sache
ist, dass man nicht binär tun Suche auf verkettete Listen,
Sie kann es nur auf Arrays.
Aber wahrscheinlich noch wichtiger ist, Sie kann nicht binäre Suche zu tun
auf einem Array, die nicht sortiert ist.
Upfront müssen Sie möglicherweise sortieren das Array, und nur dann können
Sie binäre Suche zu tun.
Also, wenn Ihr Ding ist nicht sortierten zu beginnen,
dann lineare Suche könnte schneller sein.
>> Frage 27.
So betrachten Sie das Programm unter, die in der nächsten Folie sein wird.
Und das ist das, wo wir sind werde ausdrücklich zu wollen
Die Werte für die verschiedenen Variablen.
Also schauen wir uns das an.
>> So säumen ein.
Wir haben int x gleich 1.
Das ist das einzige, was passiert ist.
Also in Zeile ein, in sehen wir unsere Tisch, dass y, a, b und tmp sind
geschwärzt.
Also, was ist x?
Nun, wir nur setzen Sie ihn gleich 1 ist.
Und dann Zeile zwei, nun ja, wir sehen, dass y auf 2 gesetzt ist,
und die Tabelle bereits in für uns gefüllt.
So x 1 ist und y 2 ist.
>> Nun Linie drei, jetzt sind wir innerhalb der Swap-Funktion.
Was haben wir übergeben zu tauschen?
Wir passierten Kaufmanns-x für a, und das kaufmännische y für b.
Wo das Problem vorher angegeben, dass die Adresse x
0x10 ist, und die Adresse y 0x14.
Also a und b gleich sind 0x10 und 0x14 sind.
>> Jetzt in Zeile drei, was sind x und y?
Nun, nichts hat sich geändert zu x und y an diesem Punkt.
Obwohl sie innerhalb eines Hauptstapelrahmen,
sie haben immer noch die gleichen Werte, die sie zuvor.
Wir haben keine Speicher modifiziert.
So x 1 ist, y 2 ist.
In Ordnung.
So, jetzt haben wir gesagt int tmp gleich einem Stern.
Also in Zeile vier, alles ist gleich, mit Ausnahme tmp.
Es wurden keine Werte geändert von irgendetwas außer tmp.
Wir tmp gleich einen Stern Einstellung.
Was ist Stern ein?
Nun, ein Punkte auf x, also Stern A ist gleich x, die 1 geht.
Also alles wird kopiert unten, und tmp auf 1 gesetzt ist.
>> Nun ist die nächste Zeile.
Stern a gleich star b.
Also durch die Linie five-- wieder gut, alles ist die gleiche, außer was auch immer star a.
Was ist Stern ein?
Nun, nur gesagt, dass wir Sterne a x.
Also wir verändern x Gleich Sterne b.
Was ist Stern b? y. b zeigt auf y.
Also star b ist y.
Also werden wir die Einstellung x gleich y, und alles andere ist gleich.
So sehen wir in der nächsten Zeile, dass x ist jetzt 2, und der Rest sind nur kopiert nach unten.
>> Jetzt in der nächsten Zeile, star b gleich tmp.
Nun, nur gesagt, dass wir Sterne b y, so dass wir die Einstellung y gleich tmp.
Alles andere ist gleich, so wird alles kopiert nach unten.
Wir setzen y gleich tmp, das ist ein, und alles andere ist die gleiche.
>> Nun endlich, Zeile sieben.
Wir sind wieder in der Hauptfunktion.
Wir sind nach dem Swap ist beendet.
Wir haben eine, b verloren und tmp, aber letztlich haben wir
sind keine Werte ändern von irgendetwas an dieser Stelle,
kopieren wir nur x und y nach unten.
Und wir sehen, daß x und y Jetzt 2 und 1 anstelle von 1 und 2.
Der Swap wurde erfolgreich ausgeführt.
>> Frage 28.
Angenommen, Sie stoßen die Fehlermeldungen
unten während der Bürozeiten im nächsten Jahr als CA oder TF.
Beraten, wie jeder dieser Fehler zu beheben.
So undefined reference to GetString.
Warum könnte man das sehen?
Nun, wenn ein Schüler mit GetString in ihrem Code,
sie ordnungsgemäß eingeschlossen CS50 Hash dot h, um den CS50-Bibliothek enthalten.
>> Nun, was tun sie brauchen, um diesen Fehler zu beheben?
Sie müssen einen Bindestrich LCS50 am tun Befehlszeile, wenn sie kompilieren.
Also, wenn sie nicht bestehen, Klappern dash LCS50, sind sie
nicht die tatsächliche zu haben Code, der GetString implementiert.
>> Frage 29.
Implizit erklärt Bibliotheksfunktion strlen.
Gut, das jetzt, nicht sie haben getan den richtigen Hash gehören.
In diesem besonderen Fall wird die Header-Datei sie benötigen, um zählen ist string dot h,
einschließlich String dot h, jetzt die student-- jetzt der Compiler
Zugriff auf die Erklärungen strlen,
und er weiß, dass Ihr Code wird mit strlen korrekt.
>> Frage 30.
Weitere Prozent Konvertierungen als Daten Argumente.
Also, was ist das?
Gut erinnern, dass diese Prozent signs-- wie sie sind relevant für printf.
So in printf wir könnten percent-- wir könnten etwas ausdrucken
wie Prozent i Backslash n.
Oder wir könnten wie Prozent i drucken, Raum Prozent i, Raum, Prozent i.
So dass für jede der Personen, Prozentzeichen, müssen wir
eine Variable am Ende der printf übergeben.
>> Also, wenn wir sagen, printf paren Prozent i Backslash n nahe paren,
na ja, sagen wir, dass wir werde eine ganze Zahl zu drucken,
aber dann haben wir nicht printf übergeben eine ganze Zahl, um tatsächlich zu drucken.
Also hier mehr Prozent Umsätze als Daten Argumente?
Das sagt, dass wir eine ganze Reihe von Prozenten,
und wir haben nicht genug Variablen tatsächlich in jenen Prozente zu füllen.
>> Und dann auf jeden Fall, für Frage 31, definitiv in einem Blöcken verlor 40 Bytes.
Das ist also ein Valgrind Fehler.
Dieser sagt, dass irgendwo im Code,
Sie eine Zuordnung, die 40 haben Byte groß, so dass Sie malloced 40 Bytes,
und Sie nie befreit es.
Wahrscheinlich brauchen Sie nur einige Speicherlecks zu finden,
und herausfinden, wo Sie ihn brauchen Free Speicherblock.
>> Und Frage 32, ungültigen Schreib der Größe 4.
Auch dies ist ein Valgrind Fehler.
Dies muss nicht zu tun mit Speicherlecks jetzt.
Dies ist, die meisten likely-- Ich meine, es ist eine Art von ungültigen Speicherrechte.
Und wahrscheinlich ist dies einige Art von Pufferüberlauf.
Wo haben Sie ein Array, vielleicht ein Integer-Array, und lassen Sie uns
sagen, es ist der Größe 5, und Sie versuchen, Array Klammer 5 berühren.
Also, wenn Sie versuchen, um zu schreiben Wert, das ist nicht ein Stück Erinnerung
dass Sie tatsächlich den Zugang zu so wirst du diese Fehlermeldung erhalten,
sagen ungültigen Schreib der Größe 4.
Valgrind wird, zu erkennen, du bist versuchen, Speicher unsittlich zu berühren.
>> Und das ist es für quiz0.
Ich bin Rob Bowden, und dies ist CS50.