C++ c+中的指针错误+;代码

C++ c+中的指针错误+;代码,c++,arrays,pointers,C++,Arrays,Pointers,以下是向图形添加顶点的代码: void myGraph::addVertex(const string &newVertex) { if (getIndex(newVertex) != -1) { std::cout << ("addVertex: "); std::cout << newVertex; std::cout << (" failed -- vertex already ex

以下是向图形添加顶点的代码:

void myGraph::addVertex(const string &newVertex)
{
    if (getIndex(newVertex) != -1)
    {
        std::cout << ("addVertex: ");
        std::cout << newVertex;
        std::cout << (" failed -- vertex already exists.") << std::endl;
        return;
    }

    // if array of vertices is full, we need to expand it and 
    // also expand Edges
    if (sizeof(Vertices)/sizeof(Vertices[0])==numVertices)
    {
        Vertices = resize(Vertices, 2*numVertices + 1);
        Edges = resize(Edges, 2*numVertices + 1);
    }

    Vertices[numVertices++] = newVertex;

}
void myGraph::addVertex(常量字符串和newVertex)
{
如果(getIndex(newVertex)!=-1)
{

std::cout
sizeof
给出的是指向数组中数据的指针的大小,而不是数组的总大小。这取决于您的平台,但很可能是
sizeof(string*)/sizeof(string)
(相当于您的大小计算)总是会返回1。您可能应该使用类似于
std::vector
std::list
的东西。对于这一点,正确的选择取决于您将如何准确地使用它。这些标准容器类将为您分配内存和调整大小,因此您不必担心它。

sizeof
是giving指向数组中数据的指针的大小,而不是数组的总大小。这取决于您的平台,但很可能是
sizeof(string*)/sizeof(string)
(相当于您的大小计算)总是会返回1。您可能应该使用类似于
std::vector
std::list
的东西。对于这一点,正确的选择取决于您将如何准确地使用它。这些标准容器类将为您分配内存和调整大小,因此您不必担心它。

sizeof
是giving指向数组中数据的指针的大小,而不是数组的总大小。这取决于您的平台,但很可能是
sizeof(string*)/sizeof(string)
(相当于您的大小计算)总是会返回1。您可能应该使用类似于
std::vector
std::list
的东西。对于这一点,正确的选择取决于您将如何准确地使用它。这些标准容器类将为您分配内存和调整大小,因此您不必担心它。

sizeof
是giving指向数组中数据的指针的大小,而不是数组的总大小。这取决于您的平台,但很可能是
sizeof(string*)/sizeof(string)
(相当于您的大小计算)总是返回1。您可能应该使用类似于
std::vector
std::list
的内容。对于这一点,正确的选择取决于您将如何准确地使用它。这些标准容器类将为您处理内存分配和大小调整,因此您不必担心它。

您可以通过传入来修复它g要调整大小的旧数组大小:

string *myGraph::resize(string array1[], int array1Size, int newSize)
然后:

if(array1Size

正如Katie解释的那样,
sizeof(array1)
在您的代码中不是实际数组的大小,您应该使用
string*array1
来明确它是指向堆上已分配内存的指针

您可以通过传递旧数组大小以调整大小来修复它:

string *myGraph::resize(string array1[], int array1Size, int newSize)
然后:

if(array1Size

正如Katie解释的那样,
sizeof(array1)
在您的代码中不是实际数组的大小,您应该使用
string*array1
来明确它是指向堆上已分配内存的指针

您可以通过传递旧数组大小以调整大小来修复它:

string *myGraph::resize(string array1[], int array1Size, int newSize)
然后:

if(array1Size

正如Katie解释的那样,
sizeof(array1)
在您的代码中不是实际数组的大小,您应该使用
string*array1
来明确它是指向堆上已分配内存的指针

您可以通过传递旧数组大小以调整大小来修复它:

string *myGraph::resize(string array1[], int array1Size, int newSize)
然后:

if(array1Size

正如凯蒂解释的那样,
sizeof(array1)
在你的代码中不是实际数组的大小,你应该使用
string*array1
来明确它是指向堆上已分配内存的指针

我会向你投赞成票-我在回答中几乎提到了传递大小的选项,但决定他可能最好使用stl。还有一个memory泄漏是因为resize分配了一个新数组,但似乎没有任何东西可以删除旧数组。我同意,vector是一种方法-还有更多地方OP使用
sizeof(顶点)/sizeof(顶点[0])
来获得数组大小-所有这些都必须固定。我用Vertice->length()替换了这个sizeof(顶点)/sizeof(顶点[0])。它仍然不起作用。它只是添加了一个vertice,然后抛出了坏的ptr,它并没有调整其他vertice的数组大小vertices@MuhammadOwaisVertice->length()错误,它只会编译,因为std::string提供函数:std::string::length()。如果您在堆上动态分配数组,则必须将其大小保留在某个变量中,而不是在java中调用数组上的.length来获取其大小。我会就此向您投赞成票-我在回答中几乎提到了传递大小的选项,但他认为使用stl可能会更好。由于resize分配了一个新数组,但似乎没有任何东西删除旧的数组。我同意,向量是一种方法-还有更多的地方OP使用
sizeof(顶点)/sizeof(顶点[0])
来获得数组大小-所有这些都必须是固定的。我用Vertice->length()替换了这个sizeof(顶点)/sizeof(顶点[0])。它仍然不起作用。它只是添加了一个vertice,然后抛出了坏的ptr,它并没有调整其他vertice的数组大小vertices@MuhammadOwaisVertice->length()错误,它只会编译,因为std::string提供函数:std::string::length()。如果您在堆上动态分配数组,则必须将其大小保留在某个变量中,而不是在java中调用数组上的.length来获取其大小。我会就此向您投赞成票-我在回答中几乎提到了传递大小的选项,但他认为使用stl可能会更好。由于resize分配一个新数组,但不分配任何内容