C++ 这种情况是否需要删除或创建新变量?

C++ 这种情况是否需要删除或创建新变量?,c++,pointers,memory-leaks,new-operator,delete-operator,C++,Pointers,Memory Leaks,New Operator,Delete Operator,我正在创建一些代码来“解析”IP地址。基本上,我正在使用一些只接受“AAA.BBB.CCC.DDD”形式的IP地址的遗留代码,并希望写入类似“10.2.4.3”的内容,使代码工作,而无需键入010.002.004.003。IP地址保存在一个字符指针中,我编写的向代码中添加零的函数返回另一个字符指针。以下主要功能是否可以使用(即没有内存泄漏或其他问题) 虽然我对C++内存泄漏问题的理解是,它们是由于新的分配,然后不是在最后删除或者分配新的,然后重新分配它们,在这种情况下,我真的不确定。由于是静态分

我正在创建一些代码来“解析”IP地址。基本上,我正在使用一些只接受“AAA.BBB.CCC.DDD”形式的IP地址的遗留代码,并希望写入类似“10.2.4.3”的内容,使代码工作,而无需键入010.002.004.003。IP地址保存在一个字符指针中,我编写的向代码中添加零的函数返回另一个字符指针。以下主要功能是否可以使用(即没有内存泄漏或其他问题)


虽然我对C++内存泄漏问题的理解是,它们是由于新的分配,然后不是在最后删除或者分配新的,然后重新分配它们,在这种情况下,我真的不确定。由于是静态分配的,将其分配给在解析器函数中创建的char指针是否会导致任何类型的内存泄漏或其他问题?

否,如果不执行任何
新建
,则不需要
删除。但您的程序遇到了另一个问题:

char* parser(char* ip) {
    char out[16];    //16 is the length of the final IP address with the dots and \0 char at the end
    //find output char array
    return out
}
这将返回一个悬空指针。访问返回的值是不安全的,因为一旦函数返回,它就会被重用

一种与您所拥有的略有不同的解决方法是:

void parser(const char* ip, char* out) {

    // todo: write to out here;
}

int main() 
{
    const char *a="10.2.4.3";
    char out[16];
    parser(a, out);

    return 0;
}

但这仍然看起来像是用C++编译器编写的老C。有更好的结构可用。

您在这里忘记了分号
返回
parser
返回时,
out
指针指向已破坏的数组。可能没那么有用。代码不包含“在字符指针中”的IP地址。它将其保存在一个**数组中,该数组由
常量char
组成,并使用指向该数组的指针。但是指针的类型应该是
constchar*
。编写时代码格式不正确。“parser”不是此函数的正确名称。功能就是行动;他们的名字应该是动词。名词是用来表示对象的。啊,是的,你说得对,我甚至没有考虑过这个问题,因为它是在解析器函数中构造的,一旦函数结束,它就变成了一个悬空的指针。你的代码看起来更像老C,因为大部分旧代码是在C之前编写的,但是它正在C++程序中使用。
void parser(const char* ip, char* out) {

    // todo: write to out here;
}

int main() 
{
    const char *a="10.2.4.3";
    char out[16];
    parser(a, out);

    return 0;
}