将自定义数组传递给函数(c++)时出现问题
problem with passing custom array to function (c++)
我有一个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是一个类,则不会调用构造函数。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题