使用引用函数调用时出现运行时错误

Runtime Error in using function call by reference?

本文关键字:运行时错误 函数调用 引用      更新时间:2023-10-16

我有一个类定义为,

class dimension{
public:
    dimension();
    const char* getname();
    long ing getlength();
    void setname(const char* text)
    void setlength(long int size)
    virtual ~dimension();
private:
    const char* name;
    long int length;
}

我得到错误关于函数setnamesetlength是重要的,所以他们的定义是,

void dimension::setname(const char* text)
{
    dimension::name = text;
}
void dimension::setlength(long int size)
{
    dimension::length = size;    
}

现在我有2个函数,我用来从文件中读取类维度的对象数组。它们的定义是。

void read_dimension(dimension** dims, int*ndims, const char* text, long int size)
{
    int i;
    *dims = new dimension[*ndims];
    for(i=0; i<ndims; i++)
    {
        (*dims)[i].setname(text)   
        (*dims)[i].setlength(size) 
    }
}
void read_file(char *path, dimension** dims, int *ndims)
{
    //do-- open file and read the variables ndims, text and size from it.
    read_dimension(dims, ndims, text, size);
    //do-- print name and length of all elements of (*dims).
}
现在,我将main中的这些函数调用为
int main()
{
    //do-- get file path
    dimesnion* gdims;
    int num_dims;
    read_file(path, &gdims, &num_dims);
    //do-- print name and length of each element of gdims.
    return 0;
}

当我运行代码时,从函数read_dimension()main()打印的变量"name"是不同的,但变量"length"是相同的。我不明白为什么会发生这种事。
如果有人能帮忙我将很高兴。

毫无疑问,text是read_dimension函数中的一个局部变量,可能是一个char数组。Dimension::setname将一个指针分配给另一个指针,如前所述,当read_dimension函数中的文本变量超出作用域时会发生什么?它会死…现在,您在维度类中的指针指向"无处"。我更喜欢使用const char *作为字符串字面值或作为指向字符数组中某些字符的指针。如果你想存储一个字符串,你可能会通过strcpy复制它,当然目标字符数组必须有足够的空间。

这段代码的目的是什么:和dimension::length = size;在setname和setlength方法中?你在次元类的范围内,对吧?