为二维整数数组分配内存,但它应该是连续的

Rav*_*tel 1 c arrays malloc pointers multidimensional-array

我想将内存分配给类型的二维数组,int但内存应该是连续的.

只需拨打一个电话就可以释放它free( ptr ).我不需要为每个内存块免费调用.

Lun*_*din 5

形式上,它是这样完成的:

int (*arr_ptr) [x][y] = malloc( sizeof(int[x][y]) );

(*arr_ptr)[i][j] = something; // access one element

free(arr_ptr);
Run Code Online (Sandbox Code Playgroud)

但是,这使元素的访问有点不方便:(*arr_ptr)[i][j]有点难以阅读.避免这种情况的一个技巧是省略数组指针的一个维度,而是将其视为一维数组的数组:

int (*arr_ptr) [y] = malloc( sizeof(int[x][y]) );

arr_ptr[i][j] = something; // access one element

free(arr_ptr);
Run Code Online (Sandbox Code Playgroud)

如果你有一个古老的编译器,你必须创建一个更丑陋,"受损"的2D数组:

int* ptr = malloc( sizeof(int) * x * y );

ptr[i*y + j] = something; // access one element

free(ptr);
Run Code Online (Sandbox Code Playgroud)