2010-12-29 26 views
6

Tôi đã cố gắng tạo mảng 2D trong khối bộ nhớ liên tục, nhưng nó cho khối M liên tục, mỗi khối N.tạo mảng hai chiều tự động trong khối bộ nhớ liên tục

int **arr = new int*[M]; 
for (int i = 0 ; i < M ; i++) 
{ 
    arr[i] = new int[N]; 
} 

Cách tạo mảng 2D trong khối bộ nhớ liên tục?

+4

** Vui lòng không tự làm điều này. Sử dụng boost :: multi_array. –

+5

Vâng, đừng học bất cứ điều gì mới, chỉ cần mã như khỉ, xin vui lòng. – bartimar

Trả lời

13
int *buffer=new int[M*N]; 
int **arr=new int*[M]; 
for(int i=0;i<M;++i) 
    arr[i]=buffer+i*N; 

Thực ra không cần lưu trữ con trỏ arr - chúng có thể được tính khi cần.

+1

Cách tiếp cận này có hiệu quả nếu người ta muốn tạo một mảng đối tượng của một số lớp? – Nawaz

+1

Tôi không thấy bất kỳ vấn đề nào ở đây. Các nhà xây dựng được gọi một lần. – maxim1000

+1

Yup. Tôi nhận thấy rằng. Nhân tiện, tôi đã suy nghĩ, liệu chúng ta có thể làm cho nó hoạt động cho các hàm tạo không mặc định, trong đó mỗi đối tượng trong mảng phải được khởi tạo với các giá trị khác nhau? – Nawaz

Các vấn đề liên quan