này là khá cường điệu, nhưng là đoạn mã sau "an toàn" (tức là bảo đảm không gây lỗi segmentation):Đang truy cập con trỏ thô sau std :: vector :: bảo lưu an toàn?
std::vector<int> vec(1); // Ensures that &vec[0] is valid
vec.reserve(100);
memset(&vec[0], 0x123, sizeof(int)*100); // Safe?
tôi nhận ra rằng đây là xấu xí - Tôi chỉ muốn biết nếu nó an toàn về mặt kỹ thuật , không đẹp". Tôi đoán cách sử dụng duy nhất của nó có thể là bỏ qua các giá trị được lưu trữ ngoài một chỉ mục đã cho.
Lưu ý! How can I get the address of the buffer allocated by vector::reserve()? bao gồm cùng một chủ đề, nhưng tôi quan tâm nhiều hơn nếu đây là an toàn và nếu có những cạm bẫy làm việc này.
EDIT: Mã gốc sai, thay thế ban đầu memcpy
bằng memset
.
Ok, điều này quá xấu đến nỗi đau. Tại sao bạn làm việc đó? Bạn không thể đơn giản sử dụng một mảng, nếu bạn thực sự phải? Trong ví dụ này 100 là cố định, vì vậy bạn có thể sử dụng một mảng trên ngăn xếp mà không xóa [] ing ... – Francesco
"Lỗi phân đoạn" là sự kiện theo nền tảng cụ thể. Ngôn ngữ C++ không mô tả nó là gì. Ngôn ngữ chỉ nói cho dù một cái gì đó được xác định, và nếu như vậy, để làm những gì. –
Tôi đã downvoted câu hỏi, không phải vì tôi coi nó là một câu hỏi xấu, nhưng vì bạn không mất đủ thời gian để đảm bảo rằng những gì bạn đang hỏi là những gì bạn muốn hỏi (mã ban đầu và mã trong phiên bản hiện tại là khá khác nhau).-2 điểm rep không nhiều, nhưng nên nhắc bạn trong tương lai cẩn thận hơn một chút, như khi bạn yêu cầu người khác dành thời gian để trả lời cố gắng giúp đỡ, và đó là thời gian bị lãng phí nếu bạn cải cách câu hỏi sau trên. –