Mình có 1 đoạn code cấp phát mảng động 2 chiều sau (ngôn ngữ C)
template <class T>
void allocMatrix(T** &matrix, int n, int m)
{
size_t pointerSize = n * sizeof(T*);
size_t storeSize = n * (size_t)m * sizeof(T);
void *buffer = calloc(pointerSize + storeSize, 1); //1
if (buffer == nullptr) return;
matrix = (T**)buffer;
T *data = matrix[0] = (T*)((char*)buffer + pointerSize); //2
for (int i = 0; i < n; ++i)
{
data += m;
matrix[i] = data;
}
}
Đoạn code trên dùng để cấp phát 1 vùng nhớ duy nhất chứa con trỏ và các phần tử trong ma trận (sách Kĩ Thuật Lập Trình - Trần Đan Thư)
Code trên có dùng hàm calloc của C, bây giờ mình muốn chỉnh lại sang C++ (từ //1 đến //2) như sau:
T *buffer = new T[pointerSize + storeSize];
if (buffer == nullptr) return;
matrix = (T**)buffer;
T *data = matrix[0] = buffer + pointerSize;
thì tính chất có giống với code gốc phía trên không mọi người. Mình có chạy qua nhiều test (đã thành công) nhưng vẫn muốn lên đây hỏi cho chắc. Cảm ơn mọi người.
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?