草庐IT

野指针

全部标签

c++ - 这是在 C++ 中释放指针内存的正确方法吗

这是一个例子,我对它是否是释放指针分配内存的正确方法感到震惊char*functionTest(){char*a=newchar[10];returna;}intmain(){char*b;b=functionTest();delete[]b;return0;}这是一个非常初学者的问题,但仍然想消除我的疑问。从delete编辑到delete[]感谢@sharptooth。提前致谢。 最佳答案 技术上正确的C++(截至此时使用delete[]进行编辑)代码将编译并运行而不会出现错误。然而,在生产C++代码中,您将很少使用new[]和d

c++ - 指向 C++ 中内联 __asm block 的指针

所以我一直在VS2010中使用__asmblock,但我没能找到更好的方法来获取指向汇编block开头的指针。我知道如何做到这一点的唯一方法是声明一个void函数。一个问题是void函数在我的程序集block之前和之后都有自己的程序集,我必须通过获取函数的真实地址并添加偏移量来进行补偿。例子:C++voidmyfunc(){__asm{nopnopnopret}}会产生类似这样的装配:pushebpmovebp,espaddesp,8nopnopnopretnmovesp,ebppopebpretnmyfunc()如果执行,很可能会出错。 最佳答案

c++ - 指针或类作为迭代器?

我正在用C++编写一个随机访问容器。在我的代码中我使用这个(好吧,在我的实际代码中我使用各种分配器类型定义,这更容易理解):template>classCarray{public://...typedefT*iterator;typedefconstT*const_iterator;//...};但我也可以创建一个派生自std::iterator的不同迭代器类。这将添加对typedef的支持(it::iterator_category、it::difference_type等)。现在我的问题是,使用迭代器类而不是原始指针是否会产生开销?如果是,这种开销有多大,是否严重到不使用迭代器类的

c++ - 具有指针结构的类是否需要析构函数

我有一个类,它有一个结构,其中一个成员是指针。structgroup{void*v1,void*v2;};classA{A(group&handle):m_handle(handle)private:groupm_handle;};类A中没有指针成员。当A中没有定义析构函数时,我没有看到任何问题(例如内存泄漏)。我了解到,当对象A超出范围时,会调用A的析构函数如果A中存在成员类,则调用它们的析构函数,依此类推。那么,像上面的m_handle这样的成员结构会发生什么-它们是否具有类似于析构函数的任何东西,以及当对象A超出范围时如何删除结构组中的两个空指针? 最

c++ - 将指针转换为 int/将指针存储为类型 T

我希望计算一个指针被使用了多少次。我有一张map:staticstd::mapcounters;当我想向它插入一个新值时,我会像这样使用它:templateMyClass::addPointer(T*tPtr){counters[((unsignedint)tPtr)]++;}做这样的类型转换可以安全吗?这不是一项昂贵的手术等吗?另外,这是确保每个指针只得到一个计数的合适方法吗?谢谢 最佳答案 IMO,您真的不需要将其转换为unsignedint。您可以使用void*获取map:staticstd::mapcounters;空检查在

c++ - 我可以通过类型特征来确定指针是否为整数类型吗?

通过使用类型特征,我可以找出类型是整型还是指针(以及更多)。是否也可以查明传递的指针是整型数据类型(int、float、char)而不是对象?编辑:除了Armen's回答,如果有人使用LOKI库而不是Boost,removepointer的功能类似于TypeTraits::PointeeType 最佳答案 boost::is_pointer::value&&boost::is_integral::type>::valueBtwfloat不是整数。您可能需要is_arithmetic 关于

c++ - 将 lparam 作为指向类的指针发送,并在 WndProc() 中使用它

我有这个抽象代码:我想在CreateWindowEx()中使用lParam(最后一个参数)来保存指向在main-SaveArr开头声明的类的指针。然后,我想在函数WndProc中使用它。一开始我做了一个全局数组,然后我可以在任何地方使用它,但就c++而言,它并不是那么“聪明”,所以我试图对它进行一些升级。classSamples{intarr[ITERATIONS+1];intindex;...}INTWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow){Samples*S

c++ - 指针 vector

如果我在类头中有这样的定义:vectorbaddies;然后我在构造函数中初始化如下:Class::Class(vectorinput){baddies=input;}我最终会得到什么?有两组指向对象的指针的两个vector?简单地指向原始vector会更好吗?这可能吗?或者在类中保存一个指针引用vector以避免重复指针会更好吗?访问多个类中的对象和对象数组的最佳实践是什么?引用?指针?指针引用?提前致谢! 最佳答案 这取决于您要提供的语义。在C++11中,您可能想要做的是:Class::Class(vectorinput):ba

c++ - 文件操作 |获取和放置指针

我有一些关于操作文件的问题;a.)我对C++中的get和put指针有点困惑。我是否显示了获取指针和放置指针的正确位置。MyFile.seekg(0,ios::beg);MyFile.seekp(-10,ios::end);index:012345678910...-10-9-8-7-6-5-4-3-2-10__________________________________________________________________^^^^^^getPointerputpointerMyfile.get(character);MyFile.write(SomeString,4);M

c++ - 指针到指针到 Const 的转换

我正在读一本名为C++Gotchas的书这解释了const指针之间的转换,我在理解以下规则时遇到了一些麻烦:TwopointertypesT1andT2aresimilarifthereexistsatypeTandintegern>0suchthat:T1iscv1,0pointertocv1,1pointerto...cv1,n−1pointertocv1,nTand,T2iscv2,0pointertocv2,1pointerto...cv2,n−1pointertocv2,nTwhereeachcvi,jisconst,volatile,constvolatile,ornoth