将自定义数组传递给函数(c++)时出现问题

problem with passing custom array to function (c++)

本文关键字:c++ 问题 函数 数组 自定义      更新时间:2023-10-16

我有一个T类型的数组,我将其作为指向函数的指针参数传递。问题是,我无法正确地将新数据写入该数组,而不会在第二次尝试时出现内存冲突。

在这段代码中,我从文本文件中读取整数,并将它们传递给函数(T类型模板类的一部分),以便将它们附加到数组中。

在我完成对整数的追加之后,我想在Main中使用相同的数组。

有人知道代码出了什么问题吗?

谢谢,Max

template<class T> int CFile<T>::read(T **apBuf, int aNum)
{
int readCounter = 0;
*apBuf = (T*)malloc(sizeof(T)*aNum);

for (int i = 0; i<aNum; i++)
{
    T var = read();
    if (var == NULL)
    {
        if (isEof)
        {
            return readCounter;
        }
        else
        {
            perror ("Error Reading File - Insufficient var type");
            return -1;
        }
    }
    else
    {   
        *apBuf[i] = var;
        readCounter++;
    }
}

return readCounter;
}
*apBuf[i] = var;

这就像是写的一样被解析:

*(apBuf[i]) = var;

这显然不是你想要的;CCD_ 1是指向指向数组的指针的指针;你把它当作一个指向数组的指针,并取消引用它的第i个元素。你真正的意思是:

(*apBuf)[i] = var;

*apBuf为您提供"apBuf指向的对象",即数组;则获得该数组的第5个CCD_。

也就是说,这很不寻常:为什么不将数据累积到std::vector<T>中,并从函数中返回呢?那么您就不必担心显式的动态内存管理了。(另外,T总是指针类型吗?如果不是,那么var == NULL就没有意义了。)

好吧,您使用malloc来分配数组,然后尝试分配给它。这是未定义的行为,因为您必须构造对象。

哦,你真的应该真的考虑使用自拥有的资源类,因为malloc和这种编程风格通常是非常不安全的。如果T的复制构造函数抛出异常怎么办?内存泄漏。只是举个例子。

您遇到的一个问题是使用malloc而不是new。如果T是一个类,则不会调用构造函数。