分配内存空间解决方案

分配内存空间
请问下大家都会为char** p分配一个m*n的内存空间么?  不准查网络
------解决方案--------------------
分配内存空间解决方案
------解决方案--------------------
不是char (*p)[]么
------解决方案--------------------
char* p1 = new char[n * m];
char** p = new char*[m];

for(int i = 0, j = 0; i < m; i++, j += n)
{
    p[i] = &p1[j];
}
------解决方案--------------------
怎么分配都可以, 反正是连续内存, 你分配 m*n*i*j*k 都是可以.

多维数组的访问形式, 只是指针在计算偏移.
------解决方案--------------------
char** p 有分配空间了?!
------解决方案--------------------
分配多少空间完全取决于你想干什么。
不过常理来看,给这个指针的分配尺寸应当有 n * sizeof(void*) 的形式。
------解决方案--------------------
先分配若干char *指针的内存,然后为每个char *分配若干char的内存。
------解决方案--------------------
引用:
请问下大家都会为char** p分配一个m*n的内存空间么?  不准查网络



不管怎么说P是一个指针,
你可以将它指向任何处,只要你能保证按照你的逻辑走
------解决方案--------------------
动态二维数组分配我一直都是这么写的
p=(char**)malloc(sizeof(char*)*m);
for(int i=0;i<m;++i)
{
p[m]=(char*)malloc(sizeof(char)*n);
}

用法跟二维数组p[m][n]一样
------解决方案--------------------
//在堆中开辟一个4×5的二维int数组
#include <stdio.h>
#include <malloc.h>
int **p;
int i,j;
void main() {
    p=(int **)malloc(4*sizeof(int *));
    if (NULL==p) return;
    for (i=0;i<4;i++) {
        p[i]=(int *)malloc(5*sizeof(int));
        if (NULL==p[i]) return;
    }
    for (i=0;i<4;i++) {
        for (j=0;j<5;j++) {
            p[i][j]=i*5+j;
        }
    }
    for (i=0;i<4;i++) {
        for (j=0;j<5;j++) {
            printf(" %2d",p[i][j]);
        }
        printf("\n");
    }
    for (i=0;i<4;i++) {
        free(p[i]);
    }
    free(p);
}
//  0  1  2  3  4
//  5  6  7  8  9
// 10 11 12 13 14
// 15 16 17 18 19