C++ 动态开辟空间以二维数组为例
首先建立一个二位矩阵的数据结构。
{
int **data;
int rows;
int cols;
}
new/delete 和 new[]/delete[]一定要配对使用,因为在初始化对象的过程中需要调用构造函数和构析函数
//C++版的
int InitMat(Mat *m)
{
int rows = m->rows;
int cols = m->cols;
m->data = new int*[rows];
for (int i = 0; i < rows; i++)
{
m->data[i] = new int[cols];
}
return 0;
}
int freeMat(Mat *m)
{
for (int i = 0; i < rows; i++)
{
delete[] m->data[i];
}
delete[] m->data;
}
其实上面的代码我们用的是new[] 和 delete[] 命令,而不是new和delete
单纯的new和delete命令用来开辟单个对象的空间。
//C语言版的
int InitMat(Mat *m)
{
int rows = m->rows
int cols = m->cols;
m->data = (int**)malloc(sizeof(int*) * rows);
for (int i = 0; i < rows; i++)
{
m->data[i] = (int *)malloc(sizeof(int) * cols);
}
return 0;
}
int freeMat(Mat *m)
{
int rows = m->rows;
int cols = m->cols;
for (int i = 0; i < rows; i++)
{
free(m->data[i]);
}
free(m->data);
}
reference:
http://blog.csdn.net/hazir/article/details/21413833