#include <stdio.h>
#include <string.h>
int main()
{
char arrDst[5] = {0};
char arrSrc[10] = "123456";
memcpy(arrDst, arrSrc, sizeof(arrSrc));
return 0;
}
Hier in diesem Programm ist es klar, dass es eine Speicherbeschädigung gibt.Hat der GCC-Compiler eine Option, um die Speicherbeschädigung während der Kompilierung zu erkennen?
Gibt es eine Option im GCC-Compiler, mit der ich dieses Problem zur Kompilierzeit erkennen kann?
Hinweis: Ich verwendete valgrind --leak-check=full
, aber es hilft nicht.
Dies ist kein Speicherverlust, es ist ein Pufferüberlauf. Valgrind kann diese nur finden, wenn Sie die Puffer mit 'malloc()' belegen. –
Warum denken Sie, dass die Speicherbeschädigung klar ist? Der Compiler darf keine Annahmen für die Semantik von memcpy machen. – swegi
@swegi: Der Compiler weiß genau, was die Semantik von 'memcpy' ist; Dieser Name ist für die Implementierung durch den C-Standard reserviert. Selbst wenn Sie Ihre eigene "memcpy" -Funktion schreiben, die etwas anderes macht, darf der Compiler sie ignorieren und annehmen, dass Sie die '' -Funktion aufrufen. –