Tôi đang bị rò rỉ bộ nhớ trong một chương trình lớn hơn và tôi tin rằng đây là nguyên nhân của nó.con trỏ char là bộ nhớ mảng cấu trúc bị rò rỉ
#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");
}
Bộ nhớ lúc tạm dừng đầu tiên: ~ 500K.
Bộ nhớ ở giây tạm dừng: ~ 1.7M.
Sử dụng VS2012 để thử nghiệm. Bất kỳ ý tưởng?
Mã của bạn có vẻ chính xác. Bạn đo mức sử dụng bộ nhớ như thế nào? Có thể quản lý heap của bạn chỉ đơn giản là đã không nén heap của nó sau cuộc gọi của bạn để 'miễn phí'? Trong trường hợp này, bộ nhớ bổ sung sẽ được gán cho quy trình của bạn nhưng sẽ không được chương trình của bạn sử dụng để thực sự có sẵn cho mã khác để phân bổ. – simonc
Khi u sử dụng malloc, hãy chắc chắn để kiểm tra xem bộ nhớ thực sự được phân bổ nếu (Character == NULL) – hazzelnuttie
bạn không nên đúc sự trở lại từ malloc. Đây là C và bạn có thể gán một khoảng trống * cho bất kỳ thứ gì. –