Ich habe Speicherverluste in einem größeren Programm und ich glaube, das ist die Ursache dafür.Char Zeiger ist Struct Array Speicherleck
#include <stdlib.h>
#include <Windows.h>
typedef struct _struct{
char* name;
} str;
int main() {
system("PAUSE");
str* Character = (str*)malloc(sizeof(str) * 20000);
for(int i = 0; i < 20000; i++){
Character[i].name = (char*)malloc(20000); // Assign memory.
}
for(int i = 0; i < 20000; i++){
free(Character[i].name); // Free memory.
}
free(Character);
system("PAUSE");
}
Speicher bei der ersten Pause: ~ 500K.
Speicher in der zweiten Pause: ~ 1.7M.
Verwendung von VS2012 zum Testen. Irgendwelche Ideen?
Ihr Code sieht korrekt aus. Wie messen Sie den Speicherverbrauch? Ist es möglich, dass Ihr Heap-Manager seinen Heapspeicher nach dem Aufruf von "free" nicht komprimiert hat? In diesem Fall wird Ihrem Prozess zusätzlicher Speicher zugewiesen, der jedoch nicht von Ihrem Programm verwendet wird, sodass er tatsächlich für anderen zuzuweisenden Code verfügbar wäre. – simonc
Wenn Sie malloc verwenden, müssen Sie sicherstellen, dass der Speicher tatsächlich zugewiesen ist. If (Character == NULL) – hazzelnuttie
Sie sollten die Rückgabe nicht von malloc übertragen. Dies ist C und Sie können eine void * zu etwas zuweisen. –