Tôi có dòng sau trong chương trình của tôi gây ra một cảnh báo thời gian chạy:Tuyên bố hardcoded std :: string gây tràn bộ đệm
if (!is_directory("C:\\NGFMS_Debug\\Files") && !create_directories("C:\\NGFMS_Debug\\Files"))
Các văn bản của các cảnh báo là như vậy: "Một tràn bộ đệm đã xảy ra trong XXX.exe đã làm hỏng trạng thái nội bộ của chương trình. "
Cảnh báo có trong lệnh gọi đến "is_directory (...)". Tôi đoán không gian cho chuỗi không được phân bổ, nhưng tôi nghĩ cú pháp như thế này là hợp pháp.
Chức năng is_directory là một phần của tăng/filesystem.hpp và tôi đang sử dụng không gian tên sau đây:
using namespace boost;
using namespace boost::filesystem;
using namespace std;
này được nhận được biên soạn dưới VS2005 C++. Bất kỳ ý tưởng?
Cập nhật
Tôi đã thử một vài điều khác nhau và bước qua mã và đây là những gì tôi tìm thấy.
Nếu tôi làm điều này
char* path_chars_c;
path_chars_c = "C:\\Debug\\Files";
string path_str_c(path_chars_c);
Các path_chars_c biến chứa chuỗi thích hợp, nhưng path_str_c biến chứa rác sau khi khởi tạo. Vì vậy, nó xuất hiện rằng khởi tạo chuỗi bị hỏng ở đây. Có ai đã từng nhìn thấy điều này?
Lỗi tràn bộ đệm không gây ra ngoại lệ - nếu bạn thực sự thấy ngoại lệ thì bạn cần cung cấp thêm thông tin. – ildjarn
@ildjarn Tôi nhìn thấy điểm ngắt cửa sổ mà tôi cho là vậy. Bài đăng đã thay đổi tương ứng. – Ian
Tôi đang bối rối. Đây có phải là cảnh báo trình biên dịch không? Bạn nên đăng nguyên văn thư. – Gabe