int main()
{
char *name = new char[7];
name = "Dolphin";
cout << "Your name is : " << name <<endl;
delete [] name;
}
Warum beschwert sich der VC++-Compiler nicht?
int main()
{
char *name = new char[7];
name = "Dolphin";
cout << "Your name is : " << name <<endl;
delete [] name;
}
Warum beschwert sich der VC++-Compiler nicht?
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 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.
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.
0 Stimmen
Gcc: Warnung: Veraltete Konvertierung von String-Konstante nach 'char*'