通过 unique_ptr 访问结构成员给出分段错误
Accessing struct member through unique_ptr gives segmentation fault
这就是我将指针设置为结构的方式。在运行时,分段错误会在第二行抛出。 LoadedPDFInfo 是 Canvas 命名空间
中的结构
struct std::unique_ptr<Canvas::LoadedPDFInfo> pdfInfo;
pdfInfo->handle = ++currentPDFHandle;
pdfInfo->totalPageNum = FPDF_GetPageCount(doc);
首先,std::unique_ptr
是 class
而不是 struct
,因此去掉 pdfInfo
变量声明中的 struct
前缀。您可能正在考虑这个:
std::unique_ptr<struct Canvas::LoadedPDFInfo> pdfInfo;
但即使在使用实际 struct
类型声明变量(或类型转换)时,您仍然不需要 struct
前缀。 C 需要,C++ 不需要。
其次,您的段错误发生是因为您只是声明了 pdfInfo
变量,但它实际上并未指向有效的 LoadedPDFInfo
对象,因此使用 ->
运算符是不是有效的操作。就像常规指针一样,std::unique_ptr
(以及 std::auto_ptr
和 std::shared_ptr
)必须 指向某物 才能访问 something 的 成员。例如:
std::unique_ptr<Canvas::LoadedPDFInfo> pdfInfo(new Canvas::LoadedPDFInfo);
这就是我将指针设置为结构的方式。在运行时,分段错误会在第二行抛出。 LoadedPDFInfo 是 Canvas 命名空间
中的结构struct std::unique_ptr<Canvas::LoadedPDFInfo> pdfInfo;
pdfInfo->handle = ++currentPDFHandle;
pdfInfo->totalPageNum = FPDF_GetPageCount(doc);
首先,std::unique_ptr
是 class
而不是 struct
,因此去掉 pdfInfo
变量声明中的 struct
前缀。您可能正在考虑这个:
std::unique_ptr<struct Canvas::LoadedPDFInfo> pdfInfo;
但即使在使用实际 struct
类型声明变量(或类型转换)时,您仍然不需要 struct
前缀。 C 需要,C++ 不需要。
其次,您的段错误发生是因为您只是声明了 pdfInfo
变量,但它实际上并未指向有效的 LoadedPDFInfo
对象,因此使用 ->
运算符是不是有效的操作。就像常规指针一样,std::unique_ptr
(以及 std::auto_ptr
和 std::shared_ptr
)必须 指向某物 才能访问 something 的 成员。例如:
std::unique_ptr<Canvas::LoadedPDFInfo> pdfInfo(new Canvas::LoadedPDFInfo);