Tôi đang sử dụng STL string
trong một ứng dụng của tôi, và gần đây tôi đã thử nghiệm nó cho rò rỉ bộ nhớ, và tôi nhận thấy rằng rất nhiều chuỗi của tôi không được giải quyết đúng vào cuối chương trình.Rò rỉ bộ nhớ chuỗi C/C++?
Tôi đã thử nghiệm đoạn mã sau (không đúng nguyên văn) với một trong những chuỗi:
const string* cppString = &obj->objString;
const char* cString = cppString->c_str();
delete obj;
Sau đó, tôi đặt một break-point và nhận thấy rằng, trong khi string
rằng cppString
chỉ để không còn tồn tại, cString
vẫn đang trỏ đến một chuỗi kiểu C, chắc chắn đủ, là một trong số đó không thể được deallocated ở cuối.
Tôi có thiếu thứ gì đó về cách chuỗi C/C++ hoạt động không? Làm thế nào tôi có thể nhận được đại diện C của chuỗi được deallocated là tốt?
EDIT: Một số thông tin khác. Lớp học obj
của tôi thuộc loại Dialog
, được kế thừa Popup
. Tôi nghĩ rằng có thể là vậy, vì khi tôi xóa obj
, tôi coi nó là Popup*
, nhưng tôi đã thử nó trong một chương trình riêng biệt nhỏ và xóa dưới dạng lớp cha mẹ xóa đúng các biến thành viên con (có ý nghĩa , tất nhiên).
Tôi đã sử dụng dấu vết rò rỉ bộ nhớ trong VS và nó cho thấy chuỗi đã bị rò rỉ là chuỗi được tạo khi tôi tạo Dialog
và đặt objString
thành chuỗi được chuyển làm tham chiếu đến hàm tạo.
Cảm ơn,
Jengerer
(Rất tiếc, nhận xét trước đó của tôi bị lỗi khi đọc ưu tiên người vận hành). Tôi nghĩ bạn cần hiển thị thêm mã. Nếu không thấy định nghĩa 'obj' và cách phân bổ của nó, thật khó để suy đoán liệu' obj-> objString' có được giải phóng một cách chính xác hay không. –
Dường như một mớ hỗn độn ở đây, vì vậy tôi sẽ cập nhật OP với nhận xét của tôi. – Jengerer
Liệu 'Popup' có một destructor ảo? –