Imagine mã như:Valgrind không hiển thị truy cập bộ nhớ không hợp lệ với c_str sử dụng không đúng cách()
string f()
{
string r = "ab";
return r;
}
int main() {
const char *c = f().c_str();
printf("%s.\n", c);
return 0;
}
Mã này có thể sụp đổ, phải không? Bởi vì chuỗi đó c
điểm bị hủy. Nhưng chạy nó thông qua Valgrind không hiển thị bất kỳ truy cập bộ nhớ không hợp lệ. Tại sao? Tôi biết Valgrind không thể kiểm tra ngăn xếp, nhưng "ab" thực sự nằm trên heap, phải không?
Tối ưu hóa chuỗi nhỏ. Hãy thử '" aaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccc "' – StoryTeller
Ý của bạn là gì "Bây giờ câu hỏi thực sự của tôi là sau đây"? Hãy hỏi một câu hỏi ** mới **. –