Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.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+;+;)时出现问题_C++_Pointers_Operators_Operator Precedence - Fatal编程技术网

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

C++ 将自定义数组传递给函数(c+;+;)时出现问题,c++,pointers,operators,operator-precedence,C++,Pointers,Operators,Operator Precedence,我有一个类型为T的数组,我将它作为指针参数传递给函数。 问题是我无法正确地将新数据写入该数组,而在第二次尝试时却没有内存冲突 在这段代码中,我从文本文件中读取整数,并将它们传递给函数(T类型模板类的一部分),以便将它们附加到数组中 在我完成附加整数之后,我想在Main中使用相同的数组 有人知道代码出了什么问题吗 谢谢,麦克斯 template<class T> int CFile<T>::read(T **apBuf, int aNum) { int readCounte

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

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

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

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

谢谢,麦克斯

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;

}
template int-CFile::read(T**apBuf,int-aNum)
{
int readCounter=0;
*apBuf=(T*)malloc(sizeof(T)*aNum);
对于(int i=0;i
对其进行解析时,就好像它是这样写的:

*(apBuf[i]) = var;
这显然不是您想要的;
apBuf
是指向数组指针的指针;您将其视为指向数组的指针,并取消对其
i
th元素的引用。您真正的意思是:

(*apBuf)[i] = var;
*apBuf
提供“apBuf
指向的对象”,即数组;然后获得数组的
i
第个元素

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

对其进行解析时,就好像它是这样写的:

*(apBuf[i]) = var;
这显然不是您想要的;
apBuf
是指向数组指针的指针;您将其视为指向数组的指针,并取消对其
i
th元素的引用。您真正的意思是:

(*apBuf)[i] = var;
*apBuf
提供“apBuf
指向的对象”,即数组;然后获得数组的
i
第个元素


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

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

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

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


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

< p>嗯,你使用<代码> MalOC/<代码>来分配数组,然后尝试分配给它。这是unDEF。由于必须构造对象,因此无法定义行为


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

你能把问题充实一点吗?确切地说,它失败了吗?<代码> >(什么)
(无参数)怎么办?无参数读取()是从文本文件中读取T成员,一次读取一个。我的问题解决了,谢谢。你能把问题再具体一点吗?它到底在哪里失败了?无参数读取()做什么?无参数读取()怎么办正在从文本文件中读取T成员,一次一个。我的问题解决了,谢谢。谢谢!该死,我花了几个小时试图解决这个问题。这是一个多么美妙的地方。我当然更喜欢使用Vector-但我写这个程序不是为了我自己,而是为了大学任务。他们给出了严格的规则如何做。最好学习正确的方法来编写T他编写代码,正确地编写代码,然后与你的教授争论(至少,我是这样做的,通过这种方式,我学到了比盲目遵循空洞规则多得多的东西)。谢谢!该死,我花了几个小时试图解决这个问题。这是一个多么美妙的地方。我当然更喜欢使用Vector——但我写这个程序不是为了我自己,而是为了大学的任务。他们给出了严格的规则如何做。最好学会正确的代码编写方法,正确地编写代码,然后与教授争论(至少,我就是这么做的,我从中学到了比盲目遵循空洞规则多得多的东西)。