weak-ptr 相关问题


为什么没有从指针到引用的隐式转换到const指针[重复]

我将用代码来说明我的问题: #包括 void PrintInt(const unsigned char*& ptr) { 整数数据=0; ::memcpy(&data, ptr, sizeof(data)); // 推进 po...


“指针可以在释放后使用”错误没有看到我正在为指针分配内存

这是我的代码的一个简短示例: #包括 #包括 无效米(无效* x){ x = malloc(100); } int main(int argc, char *argv[]) { int *ptr; m(ptr); 我...


运行ASAN时malloc_trim(0)中的分段错误

代码1.c: #包括 #包括 #包括 #包括 void* 线程函数(void* arg) { char* ptr = (char *)malloc(10); 公关...


使用指向c中数组的指针返回二维数组

#包括 int (*createArray())[3] { 静态 int arr[2][3] = {{1, 2, 3}, {4, 5, 6}}; 返回 arr; } int main() { int (*ptr)[3] = createArray(); 对于 (int i = 0; i &l...


为什么const指针可以指向非常量对象?

//示例1 常量双饼 = 3.14; // 常量对象 const double *cptr = &pie; // 指向 const 对象的指针 双 *ptr = &pie; // 错误 - 指向 const 的非 const 指针 //


汇编和模板类

我正在开发一个小项目,并尝试将一些硬编码值用于内联汇编。为此,我使用模板。我创建了一个代码片段来显示我所看到的 #包括 我正在开发一个小项目,并尝试将一些硬编码值用于内联汇编。为此,我使用模板。我创建了一个代码片段来显示我所看到的 #include <iostream> template <size_t T> struct MyClass { size_t myValue = T; void doSomething() { size_t value = T; __asm { mov eax, [T] mov [value], eax } std::cout << value << std::endl; } }; int main() { auto o = new MyClass<999>(); o->doSomething(); return 0; } 事实证明,对于汇编代码,它试图使用数据段而不是“直接将数字粘贴到那里” ; 25 : { push ebp mov ebp, esp push ecx ; 26 : auto o = new MyClass<999>(); push 4 call ??2@YAPAXI@Z ; operator new add esp, 4 ; 14 : size_t value = T; mov DWORD PTR _value$2[ebp], 999 ; 000003e7H ; 26 : auto o = new MyClass<999>(); mov DWORD PTR [eax], 0 mov DWORD PTR [eax], 999 ; 000003e7H ; 15 : __asm ; 16 : { ; 17 : mov eax, [T] mov eax, DWORD PTR ds:0 ; 18 : mov [value], eax mov DWORD PTR _value$2[ebp], eax ; 19 : } ; 20 : std::cout << value << std::endl; 我正在使用 Visual Studio 2015。还有其他方法可以实现此目的吗? 啊,多么可爱又扭曲的问题啊! 我尝试使用 T 初始化 constexpr 变量。结果是相同的 - 从内存加载值。宏可用于将文字传递给内联汇编,但它们与模板不能很好地混合。 使用 T 在类中初始化枚举在理论上应该可行(https://msdn.microsoft.com/en-us/library/ydwz5zc6.aspx提到枚举可以在内联汇编中使用),但是在内联汇编使 Visual Studio 2015 编译器崩溃:-)。 似乎有效的是一个函数模板,它使用模板参数声明一个枚举,然后在内联程序集中使用该枚举。如果必须将其放在模板类中,则可以在类中实例化模板函数,如下所示: #include <iostream> template <size_t T> void dosomething() { enum { LOCALENUM = T }; size_t value = 0; __asm { mov eax, LOCALENUM mov[value], eax } std::cout << value << std::endl; } template <size_t T> struct MyClass { size_t myValue = T; void doSomething() { ::dosomething<T>(); } }; int main() { //dosomething<999>(); auto o = new MyClass<999>(); o->doSomething(); return 0; } 这会产生以下汇编代码: auto o = new MyClass<999>(); 001B1015 mov dword ptr [eax],0 001B101B mov dword ptr [eax],3E7h o->doSomething(); 001B1021 mov eax,3E7h <--- Victory! 001B1026 mov dword ptr [ebp-4],eax 001B1029 mov ecx,dword ptr [_imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A (01B2048h)] 001B102F push offset std::endl<char,std::char_traits<char> > (01B1050h) 001B1034 push dword ptr [ebp-4] 001B1037 call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (01B2044h)]


增加 ptr 以迭代数组时,nullptr 检查出现分段错误

以下代码在编译和运行时会出现分段错误。我正在 MacBook 上尝试《C++ 之旅》第 12 页上的示例。 编译命令- clang++ -Wall -std=c++11 -o 替换...


constexpr int* ptr =&i 在 msvc 中编译,但不能在 clang 和 gcc 中编译

我正在使用此处列出的书籍学习 constexpr 变量。特别是我在 C++ Primer 中读到: 声明为 constexpr 的变量是隐式 const,并且必须使用常量初始化


为什么我可以使用模板函数作为 std::sort 的参数,但不能使用模板 lambda(使用成员函数 ptr 作为模板参数)[重复]

抱歉标题很长,正如我所说的,这是有效的: 结构体 S { int a{}, b{}; }; std::ostream & 运算符<<(std::ostream &o, const S &s) { return o << '{' << s.a << '...


© www.soinside.com 2019 - 2024. All rights reserved.