动态矩阵实现了C 的功能
Dynamic matrix realization with functions in C++
大家,我想通过使用函数来实现动态二维数组(为了更轻松地创建数组,当我解决不同的任务时)。我使用下一个内存分配方式:
- 创建一个大MXN数组。
- 创建一个带有指针元素的数组。
代码:
int main()
{
int *A1;
int **A;
A1 = new T [M*N];
A = new T* [M];
for(int i=0;i<M;i++)
{
A[i]=(A1+(i*M));
}
delete []A;
delete []A1;
}
但是,当我想将创建和删除到h文件中的实现移动时(因为我使用模板来创建不同类型的数组的模板)时,我有一个问题:如何知道A1数组的地址(包含所有值的MXN数组)矩阵),以防止内存泄漏。如果我没有误认为C 中的函数()只能返回1个值(**一个指针,但是*A1指针会忘记,所以将来我可以删除数组A1的内存)。
#ifndef MATRIX_H
#define MATRIX_H
namespace matrix
{
template <typename T> T** create_matrix(int N, int M)
{
int *A1;
int **A;
A1 = new T [M*N];
A = new T* [M];
for(int i=0;i<M;i++)
{
A[i]=(A1+(i*M));
}
return A; //how to return also A1 for preventing memory leack
}
template <typename T> void delete_matrix(T* A1, T** A)
{
delete []A;
delete []A1;
}
}
#endif
您缺少一个封装级别 - 创建一个矩阵类,并同时管理内存和指针。作为积极的副作用,您将能够为新数据类型定义自定义操作员并提高代码的可读性。
我找到了另一种方法,因为a [0]收集了相同的内存地址,例如A1,理论上,当我们使用delete []A[0]
时,这与delete []A1
相似,或者没有?
#ifndef MATRIX_H
#define MATRIX_H
namespace matrix
{
template <typename T> T** create_matrix(int N, int M)
{
int *A1;
int **A;
A1 = new T [M*N];
A = new T* [M];
for(int i=0;i<M;i++)
{
A[i]=(A1+(i*M));
}
return A;
}
template <typename T> void delete_matrix(T** A)
{
delete []A;
delete []A[0]; //this is must be equivalent to delete []A1
}
}
#endif
相关文章:
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 如何使用lock_guard在c++11中实现scoped_lock功能
- 多次实现成员功能
- 如何在现代C++中实现没有宏的系统特定功能
- 模板功能实现中的错误C2975
- 代码仅在2个功能实现中的1个中溢出
- 多个精度基本功能实现
- C 将功能实现对象作为接口类型
- 功能实现:过程或线程部门
- 在接口的功能实现中
- 将功能实现为函子的优缺点
- 授权派生的功能实现,而不使其纯粹
- 将成员功能实现为外部功能
- opencv功能实现
- 纯虚拟功能实现
- 链表推回成员功能实现
- 使用信号中止功能实现
- 虚拟功能实现和多重继承
- 异常规范在声明和功能实现方面不兼容