- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
最小示例:
#include
struct TFoo
{
bool Field1_ = false;
uint64_t Field2_ = 0;
};
int chính() {
TFoo Foo_{};
const char* filename = "text.txt";
std::ofstream f(filename);
f.write((char*)(&Foo_), sizeof(Foo_));
}
clang 自第 5 版以来在 msan 中报告如下内容:
Uninitialized bytes in __interceptor_fwrite at offset 0 inside [0x720000000000, 15)
==71928==WARNING: MemorySanitizer: use-of-uninitialized-value
#0 0x2823aa (/home//test-ofstream+0x2823aa)
#1 0x27830f (/home//test-ofstream+0x27830f)
#2 0x272757 (/home//test-ofstream+0x272757)
#3 0x271388 (/home//test-ofstream+0x271388)
#4 0x270c96 (/home//test-ofstream+0x270c96)
#5 0x2709e2 (/home//test-ofstream+0x2709e2)
#6 0x26ff9e (/home//test-ofstream+0x26ff9e)
#7 0x7fbc7238382f (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
这是因为Field1_
VàField2_
之间的填充字节没有初始化。
没关系,MSAN是对的。
但是如果代码包含此类代码的非常大的示例(将结构保存到二进制文件),是否有任何漂亮的方法可以大量改进代码?
(打包结构不是我们的解决方案。)
1 Câu trả lời
如果你能改变struct TFoo
的定义,你可以像这样添加一个构造函数:
struct TFoo {
bool Field1_;
uint64_t Fields_;
TFoo() { memset(this, 0, sizeof(*this)); }
TFoo(const TFoo &rhs) : TFoo() { Field1_ = rhs.Field1_; Field2_ = rhs.Field2_; }
};
我认为您不能根据标准以这种方式使用memset
,但它可能适用于您的编译器。参见 How can I zero just the padding bytes of a class? ,其中讨论了此解决方案。
原始答案
我想到了将 Field1_
Và Field2_
之间的填充字节清零。但老实说,我不确定它是否符合标准。当然,TFoo
对象的某种序列化会好得多,但如果我理解正确的话,这不是你的选择,是吗?
struct TFoo
{
bool Field1_ = false;
uint64_t Field2_ = 0;
};
struct TFooWrapper {
union {
TFoo tfoo;
char dummy[sizeof(TFoo)] = { 0 };
} u;
};
làm mới
Từ http://en.cppreference.com/w/cpp/language/union : 至多一个变体成员可以有一个默认的成员初始值设定项。 因此上面的代码可能不正确。但是您可以,例如,为 TFooWrapper
定义默认构造函数以将所有字节清零。
关于c++ - 内存清理程序错误 : clang5 + msan + fwrite of structs with padding bytes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48458115/
Tôi đã sử dụng vue-cli trong hai tuần và mọi thứ đều hoạt động tốt cho đến hôm nay. Tôi xây dựng dự án này tại địa phương. https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
Xin chào, tôi đang cố gắng trích xuất văn bản từ hình ảnh bằng thư viện python pytesseract. Vui lòng tìm mã: từ PIL nhập Image từ pytesseract nhập image_
Lỗi của tôi /usr/bin/ld: errno: Định nghĩa TLS trong phần /lib/libc.so.6 .tbss không khớp với tham chiếu không phải TLS
Tôi đã đào tạo một mô hình và đang cố gắng sử dụng hàm dự đoán nhưng nó trả về lỗi sau. Lỗi trong độ tương phản<-(*tmp*, giá trị = contr.funs[1 + isOF[nn]])
Dựa trên thông tin từ Microsoft DataConnectors, tôi muốn tạo một trình kết nối từ PowerBi tới PostgreSQL bằng truy vấn trực tiếp thông qua trình điều khiển ODBC này. Tôi đã sử dụng lại Micros
Tôi đã tạo một gói cho SoundManagement, có một lớp mở rộng MediaPlayer. Tôi muốn kiểm soát biến này trên toàn cục. Đây là mã của tôi: package soundmanagement; impo
Tôi có một ứng dụng được triển khai trên Heroku. Tôi đang sử dụng dịch vụ miễn phí. Tôi thường xuyên nhận được thông báo lỗi sau. PG::Error: LỖI: hết bộ nhớ Nếu bạn làm mới trình duyệt, mọi chuyện sẽ ổn. Nhưng rồi, nó lại xảy ra ngẫu nhiên lần nữa
Tôi đang chạy máy chủ LAMP và file .htaccess này đang báo lỗi 500. Chức năng của nó là lọc các từ khóa và chuyển hướng chúng đến các tên miền tương ứng. Tùy chọn +FollowSymLinks RewriteEngine
Tôi có hai ổ đĩa A và B. Sử dụng một tập lệnh python, tôi tạo một số tệp trong ổ đĩa "A" và chạy một tập lệnh powerscript để sao chép tất cả các tệp trong ổ đĩa A sang ổ đĩa B sau mỗi 1 giây. Tôi có sức mạnh
Hàm bên dưới liên tục trả về thông báo lỗi này. Tôi nghĩ có thể kiểu trường double_precision đã gây ra vấn đề này, tôi đã thử sử dụng CAST nhưng có lẽ không phải vậy hoặc tôi đã làm không đúng... Trợ giúp? Đây là lỗi: ERROR: i
Câu hỏi này đã có câu trả lời: Lỗi cú pháp do sử dụng từ dành riêng làm tên bảng hoặc tên cột trong MySQL (1 câu trả lời) Đã đóng
Tôi có một vấn đề nhỏ với cơ sở dữ liệu của mình. Tôi đã tạo một bảng "articoli" chứa thông tin về thương hiệu, mẫu mã và giá của các mặt hàng. Mỗi bài viết được xác định bởi một id (ID_ARTICOLO)`, đây là trường tự động tăng. Được rồi, bây giờ khi tôi thử chèn
Tôi mới ở đây. Hiện tại tôi đang học Lập trình C++ trung cấp trực tuyến tại DeVry. Chúng tôi đang sử dụng cuốn sách C++ Primer Plus và cho đến nay tôi thấy khá hiệu quả. Gần đây giáo viên của tôi đã ném cho chúng tôi một quả bóng cong. Nhiệm vụ hiện tại của tôi là:
Câu hỏi này đã có câu trả lời tại đây: Lỗi tham chiếu không xác định/ký hiệu bên ngoài chưa được giải quyết là gì và làm thế nào để khắc phục?
Tôi gặp vấn đề với một đoạn mã trên trang web của mình; lỗi này chỉ xảy ra trên Internet Explorer 7. Thay vì đăng tất cả các đánh dấu HTML/CSS của tôi ở đây, tôi sẽ đăng một phiên bản của trang web ở đây. Như bạn có thể thấy, tôi đã
Tôi đang gặp một số vấn đề khi sử dụng npm trên Raspberry Pi khi cố gắng xây dựng ứng dụng node.js trên thiết bị USB. package.json trông như thế này: { "name" : "node-todo",
Trong Python, bạn có None singleton, hoạt động kỳ lạ trong một số trường hợp: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (chủ yếu
Đây là tệp build.gradle (Module:app) của tôi: apply plugin: 'com.android.application' android { compileSdkV
Tôi mới làm quen với Android và dự án của tôi vừa mới biên dịch và chạy tốt nhưng sau khi tôi thử triển khai điều hướng ngăn kéo thì nó báo lỗi này: FAILURE: Build failed with an exception. Tôi nên làm gì?
Có ai có thể giải thích được điều này không? Tôi nghĩ tôi đang làm điều gì đó thực sự ngu ngốc và đang háo hức chờ đợi sự khai sáng. Tôi nhận được kết quả này: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
Tôi là một lập trình viên xuất sắc, rất giỏi!