草庐IT

Pointers

全部标签

c++ - 检查是否可以释放指针

我找遍了这个问题的答案,但似乎找不到。(我对C++的经验相当有限)在我的库中,我释放了一个字符串。(太棒了,是吧?)这就是问题所在。我有一个包含char*的结构,它可能分配在堆上,也可能不分配。虽然它是一个有效的指针,但它不能被释放。浏览器char*s1="AString";char*s2=(char*)memcpy(malloc(9),s1,9);free(s2);free(s1);将导致“free(s1);”错误(正如它应该)因为s1实际上并不需要被释放,(它不在堆上)我怎样才能以“可接受”的方式处理这个问题?(在类似的主题上,“让它崩溃”的答案在我看来并不合理)因为结构不是由库单

c++ - 我可以通过 C++ 中的(无符号)char* 读取任何可读的有效内存位置吗?

今天我的搜索foo似乎缺少。我想知道根据标准C++通过(unsigned(?))char*检查“任何”内存位置是否合法。任何位置是指程序内对象或数组(或数组内部)的任何有效地址。举个例子:voidpassAnyObjectOrArrayOrSomethingElseValid(void*pObj){unsignedchar*pMemory=static_cast(pObj)MyTypeIdentifyierx=tryToFigureOutWhatThisIs(pMemory);}免责声明:这个问题纯粹是学术性的。我不打算将其放入生产代码中!合法我的意思是,如果根据标准它真的合法,那就是

c++ - 重载下标运算符不返回指针

在我的类中,我有一个成员变量std::vectorchildren我想重载下标运算符,以便我可以轻松地索引其中一个节点。这是该函数的类减速:node*operator[](intindex);这是我对该函数的类定义:node*class_name::operator[](intindex){returnchildren[index];}然而,这个函数似乎并没有像我希望的那样返回一个指针。这是给我带来麻烦的功能:voidPrint_Tree(node*nptr,unsignedint&depth){if(NULL==nptr){return;}//nodedisplaycodefor(i

C++ 表达式必须具有指向对象的指针类型

亲爱的stackoverflow社区,这是我第一个使用带结构指针的程序,尽管进行了大量研究,但我还是找不到我要找的东西。如果已经回复,请原谅我。我有一个学校项目,我必须定义结构而不是使用指针数组来存储数据。在此循环中,出现以下错误:Expressionmusthavepointer-to-objecttypefor(inti=0;i>c_info->hoursWorked[i];}break;这是完整的代码。非常感谢你的帮助#include#include#includeusingnamespacestd;//structuredefiningEmployeestructEmploye

c++ - 指向特征矩阵的指针数组

我在我的代码中使用Eigen的MatrixXd矩阵,在某个时候我需要一个3D矩阵。由于Eigen没有三维矩阵类型,因为它只针对线性代数进行了优化,所以我创建了一个MatrixXd类型的指针数组:Eigen::MatrixXd*CVM=newEigen::MatrixXd[100];for(inti=0;i但是,稍后我需要访问这个数组上的值,为此我正在做类似的事情:for(intk=0;kcoeff(i,j)=47;}}}因为b是一个指针而不是MatrixXd本身,b(i,j)显然行不通,所以我改为我正在使用coeff()方法,但是,我收到以下错误:error:assignmentofr

c++ - 分配 'this' 指针的内存

在C++中,this指针作为隐藏参数传递给方法,它实际上指向当前对象,但是“this”指针存储在内存中的什么位置......在堆栈、堆中,数据在哪里? 最佳答案 标准没有指定this指针的存储位置。当在函数调用中将其传递给成员函数时,一些编译器将其传递到寄存器中,而其他编译器将其传递到堆栈中。它还可能取决于编译器选项。关于您唯一可以确定的是this是一个基本类型的右值,因此您不能获取它的地址。并非总是如此。在准标准C++中,您可以分配给this,例如为了指示构造函数失败。这是在引入异常之前。指示构造失败的现代标准方法是抛出异常,以保

javascript - JavaScript 中的函数指针数组?

如何在XHTML文档中用JavaScript实现一组函数指针?今天我们在讲座中学习了如何在XHTML文档中实现JavaScript函数,但是函数指针数组呢?我可以在数组中弹出一堆函数并像在C++中那样通过索引取消引用它们吗?只是好奇... 最佳答案 您可以只将对函数的引用放在一个数组中。例如:functionfunc1(){alert("foo");}functionfunc2(){alert("bar");}functionfunc3(){alert("baz");}varfuncs=[func1,func2,func3];fun

C++ *常量 *常量

我试图为此搜索答案,但我发现很难找到这种“确切”的例子。我对指向指针的指针知之甚少,我觉得除了指向某物的指针之外,还有更多东西隐藏在它的表层之下。那么你们会如何翻译呢?voidfree(shame_1*const*constgroup_1);如果我把它翻译成constgroup_1pointertoconstpointertoshame_1对吗?谢谢。 最佳答案 shame_1*const*constgroup_1;声明一个名为group_1的变量,其类型是一个常量指针(您不能更改它指向的位置)到另一个指向shame_1类型对象的常

c++ - 将 char 指针分配给数组

voidfun(chararr[]){cout为什么我允许传递一个char指针并在数组中接收它,但不能直接将char指针分配给数组。据我所知,当我们将参数传递给函数时,赋值是隐式发生的。那么为什么会有这种差异在行为上? 最佳答案 声明voidfun(chararr[]){相当于voidfun(char*arr){这意味着,在这种情况下,不需要将字符数组的大小传递给函数。现在arr指向与ptr相同的位置。但是如果是chararr2[]=ptr;编译器不知道ptr的大小,因为它是指向字符串文字hello的第一个字符的指针,因此编译器无法

c++ - 利用 vector 的元素存储在堆中的事实?

假设你有这样的东西#include#includeusingnamespacestd;vectortest(){vectorx(1000);for(inti=0;ia=test();return0;}在函数中创建一个vector并用一些元素填充它(在本例中我选择了12345,但它们不一定都相同)。我读到vector的元素存储在堆中,而引用和header数据存储在堆栈中。在上面的代码中,当返回x时,必须调用复制构造函数,这需要O(n)时间将所有元素复制到一个新vector中。但是,是否可以利用所有元素都已存在于堆中这一事实,以便只返回指向这些元素的指针之类的东西,然后创建一个使用该指针指