4 Stimmen

Was ist an diesem Code falsch?

int main()
{
    char *name = new char[7];
    name = "Dolphin";
    cout << "Your name is : " << name <<endl;
    delete [] name;
}

Warum beschwert sich der VC++-Compiler nicht?

10 Stimmen

Sie sollten Folgendes verwenden std::string die solche Dinge zulässt.

4 Stimmen

Er beschwert sich nicht, weil bei C/C++-Programmierern davon ausgegangen wird, dass sie wissen, was sie tun. Auf "name" irgendwo anders hinzuweisen ist völlig legal. Obwohl ich in diesem Fall erwarten würde, dass GCC eine Warnung ausgibt, weil Sie einen (char *) Zeiger für den Zugriff auf den konstanten Abschnitt verwenden. Ich kenne mich mit VC++ nicht aus. Wenn Sie nichts sagen, gibt main() 0 zurück.

1 Stimmen

Warum sollte sie sich beschweren? Sie tun nichts Illegales, soweit es den Compiler betrifft. Compiler sind nicht telepathisch, sie wissen nicht, was Sie tun wollten, im Gegensatz zu dem, was Sie tatsächlich getan haben.

0voto

neal aise Punkte 855

Was stimmt mit dem Code nicht? A. Er hat ein Speicherleck. B. Er führt eine unnötige neue

char *name = new char[7];

Wird nicht benötigt, da Sie den Namen schließlich einer statisch zugewiesenen Zeichenkette zuordnen werden

name = "Dolphin";

C. Selbst wenn es tatsächlich das tat, was es tun sollte, hätte es char[8] und nicht char[7] sein müssen. Das ist eine Einladung zu Seg-Fehlern

Warum beschwert sich der VC++-Compiler nicht? Compiler sind eigentlich nicht dafür gedacht, sich über Speicherlecks und logische Fehler zu beschweren.

HTH

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X