Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;返回NULL的指针_C++ - Fatal编程技术网

C++ C++;返回NULL的指针

C++ C++;返回NULL的指针,c++,C++,尝试从函数返回更新到指针。仅作为背景,这是一个类似stl向量的模板。这是返回函数 //////////////////////////////////////////////////////////////////////////////// //removes an item from the array const T& remove(int pos) { if(pos > cnt) pos = cnt; if(pos < 0)

尝试从函数返回更新到指针。仅作为背景,这是一个类似stl向量的模板。这是返回函数

    ////////////////////////////////////////////////////////////////////////////////
//removes an item from the array
const T& remove(int pos)
{
    if(pos > cnt)
        pos = cnt;
    if(pos < 0)
        pos = 0;
    static T v;
    for(int i,k = 0; i < cnt; i++,k++)
    {
        if(i == pos)
        {
            v = element[i];
            i++;
        }
        else
            element[k] = element[i];
    }
    cnt--;
    return v;
}

/////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//从数组中删除项
常数T和移除(内部位置)
{
如果(位置>cnt)
pos=碳纳米管;
如果(位置<0)
pos=0;
静态tv;
对于(inti,k=0;i
我正在尝试更新的指针变量:

TVector<Member*> members;
Member* backmember;

backmember = members.remove(members.size()-1);
TVector成员;
会员*后台会员;
backmember=members.remove(members.size()-1);

但是backmember总是返回null。我肯定我错过了一些简单的东西,只是不确定是什么。有什么想法吗?如果您有任何问题,请提前告诉我,谢谢。

我不认为这会初始化
I

for(int i,k = 0; i < cnt; i++,k++)
for(int i,k=0;i
尝试将其更改为此并测试:

for(int i = 0,k = 0; i < cnt; i++,k++)
for(int i=0,k=0;i
用于(int i,k=0;i
i,k
使用逗号运算符,按顺序计算参数,返回最后一个参数的结果。这意味着“声明i,然后声明k并将其设置为0”


i
未设置。因此,它很可能从内存中获取了一些大的随机值,而您的循环从未运行过。

只是好奇,为什么您不能使用而不是编写自己的方法。
remove
返回一个
常量t&
。您的
backmember
接受一个指针,它与引用不同。它还接受一个非
常量
指针。所以这两种情况说明这个代码是错误的。你确定这是有问题的代码吗?这是如何编译的,更不用说返回
NULL
?创建要返回的对象的静态副本是个坏主意-这意味着两个线程不能同时访问不同的数组。如果你想返回被删除的值,你应该按值来做。是的,我知道这不是我正常的编程风格。我必须填写函数,返回类型必须匹配。我知道一般的规则是不要把工作分配给stackoverflow,但我知道我忽略了一些简单的事情。这就是当java讲师教授C时发生的情况:)OP可能给人的印象是
int i,k=0
初始化
i
k
,而它只将
k
初始化为0。当然,这正是您刚才所说的,我只是想更详细地说明:)此外,我个人认为包含多个变量的
for
循环是尽可能避免的。它们很难一目了然地阅读和理解。
for(int i,k = 0; i < cnt; i++,k++)