热搜
您的位置:首页 >> 历史

在C中动态分配二维数组

2019年11月06日 栏目:历史

#include <iostream>#include <cstdlib>#include <new&

#include <iostream>

#include <cstdlib>

#include <new>

template <typename T>

T **darray_new(int row, int col)

{

int size = sizeof(T);

void **arr = (void **) malloc(sizeof(void *) * row + size * row * col);

if (arr != NULL)

{

unsigned char * head;

head = (unsigned char *) arr + sizeof(void *) * row;

for (int i = 0; i < row; ++i)

{

arr[i] = head + size * i * col;

for (int j = 0; j < col; ++j)

new (head + size * (i * col + j)) T;

}

}

return (T**) arr;

}

template <typename T>

void darray_free(T **arr, int row, int col)

{

for (int i = 0; i < row; ++i)

for (int j = 0; j < col; ++j)

arr[i][j].~T();

if (arr != NULL)

free((void **)arr);

}

实践中考虑用boost::multi_array之类的现成的解决方案可能会更有效。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1798198

如何判断正在使用的银屑病药是否含有激素?早看早知道
脱发后选择植发没效果?时间是的答案!
徐樨巍
银屑病治疗
烤瓷牙的危害
  • 友情链接
  • 合作媒体