草庐IT

野指针

全部标签

c++ - NULL指针转换

C++03$4.10-"Theconversionofanullpointerconstanttoapointertocv-qualifiedtypeisasingleconversion,andnotthesequenceofapointerconversionfollowedbyaqualificationconversion(4.4)."这是我的理解intmain(){charbuf[]="Hello";charconst*p1=buf;//2stepconversionprocess//C1:char[6]tochar*//C2:char*tocharconst*(qualif

c++ - 在二维指针 vector 中插入列的正确方法是什么?

我正在使用二维数组作为我正在制作的棋盘游戏的棋盘。成员是指向“Tile”类型对象的指针。索引是x和y,分别表示水平和垂直位置。在Board类中,它看起来像这样。vector>playGround;问题在于,随着游戏的进行,方block会添加到playGround,并且vector必须能够扩展,以防新方block的位置需要这样做。我一直在尝试在顶部添加行,并在左侧添加列。我试过使用insert()函数,这就是我的问题所在。现在我的代码是这样的:voidBoard::addRowTop(){Tile*t;inti=0;maxY++;for(;i不要介意maxX和maxY变量;它们与手头的主

c++ - 取消引用指针(并返回它)的问题

这里我有一个函数,它创建一个字符串,将它分配给一个字符串指针,然后返回它。我尝试返回一个常规字符串,但效果很好。但是当我整合指针并取消引用它们时,我的程序崩溃了。当我尝试调试它时,这是我收到的消息:Assignment2.exe中0x00024cbf处的未处理异常:0xC0000005:读取位置0xcccccce4的访问冲突。这是我的代码:string*Recipe::getCookingTime()//@intput:none//@output:cookingtimeasastring{stringtemp;stringdisplayHrs;stringdisplayMins;if(

c++ - 智能指针作为多态性的类成员

我是智能指针的新手,如果有人可以提示我作为类成员处理智能指针的方式是否正确,我将不胜感激。更准确地说,我想要实现的解决方案是在类多态性的上下文中,理想情况下应该是异常安全的。给定一个containerofheterogeneuousobjects(std::vector>my_vector),通常添加元素的方式是:my_vector.push_back(shared_ptr(newCChild(1))),以便稍后可以通过以下方式调用特定派生类的成员函数:my_vector[0]->doSomething().我想要实现的是将堆栈对象添加到vector并且仍然能够进行多态性。直觉上……喜

c++ - 如何制作指针的拷贝

我正在尝试将一个指针数据复制到另一个指针,这样如果我更改一个指针,另一个指针中的值就不会改变。我需要这个,因为我正在编写一个循环,其中有两个结构指针、value和lastValue。在循环的每次迭代中,我将value的内容分配给lastValue,并用新内容填充value。问题是因为两者都是结构指针,所以当我更改value时,lastValue也会更改,这不是我想要的行为。代码应该是这样的(结构是来自OpenCV的IplImages):IplImage*value;Iplimage*lastValue;while(1){lastValue=value;value=cvQueryFram

c++ - 将 unique_ptr 插入 map ,指针被销毁

我有以下(简化的)类(class):classOperator{private:std::map>op;public:templatevoidinsertOperand(std::stringconst&s,To=T()){op.insert(std::pair>(s,std::move(std::unique_ptr(newT(o))));}voidsetOperandsValue(std::stringconst&o,intv){op.find(o)->second->setValue(v);}};插入一个新的Operand没有任何问题。然而,当函数返回时,析构函数被调用,因此ma

c++ - 函数对象方法对函数指针安全吗?

我正在编写一个大量使用柯里化(Currying)对象和模板的项目。新decltypec++11的特性意味着我可以开始接受没有明确定义返回类型的函数对象作为我的函数对象的curry。相反,可以使用元函数提取返回类型,例如:templatestructunary_result{typedeftypenamestd::remove_reference::type>::typetype;};给定一个函数对象:structfoo{intoperator()(double)const;};(它不继承自std::unary_function或定义它的result_type),我可以将它作为unary

c++ - 肯定是无效的指针范围

我看过一些像http://boost.2283326.n4.nabble.com/shared-ptr-segfaults-on-64bit-AMD-td2560441.html这样的帖子专家可以在其中查看指针地址并立即说它无效。我猜想这些指针位于进程虚拟内存的一些已知保留位置。上面链接中的示例是0x90。这里有人知道linux上gcc/g++肯定无效的指针范围吗?0xd8怎么样? 最佳答案 虽然您不应该编写依赖于此的代码,但0x1000以下的指针几乎总是无效的。熟悉操作系统的默认内存映射将解释原因,并让您更深入地了解“正常”指针的

c++ - 将现有的类结构移植到智能指针

我知道这个问题很长,但我不确定如何用更短的方式解释我的问题。问题本身是关于类层次结构的设计,尤其是如何将基于指针的现有层次结构移植到使用智能指针的层次结构中。如果有人能想出一些方法来简化我的解释,从而使这个问题更通用,请告诉我。这样,它可能对更多SO读者有用。我正在设计一个C++应用程序来处理一个允许我读取一些传感器的系统。该系统由我收集测量值的远程机器组成。此应用程序实际上必须使用两个不同的子系统:聚合系统:这种类型的系统包含我收集测量值的几个组件。所有通信都通过聚合系统,如果需要,聚合系统会将数据重定向到特定组件(发送到聚合系统本身的全局命令不需要传输到单个组件)。独立系统:在这种

c# - 从 C# 调用包含函数指针的 DLL 函数

我有一个用C++编写的DLL,其中包含导出的函数,该函数具有用作回调函数的函数指针。//C++DllExportunsignedintDllFunctionPointer(unsignedinti,unsignedint(*TimesThree)(unsignedintnumber)){returnTimesThree(i);}我有一个CSharp应用程序,我想用它来调用DLL函数。//C#publicunsafedelegateSystem.UInt32CallBack(System.UInt32number);classProgram{[DllImport("SimpleDLL.d