分配内存空间解决方案
分配内存空间
请问下大家都会为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的内存。
------解决方案--------------------
不管怎么说P是一个指针,
你可以将它指向任何处,只要你能保证按照你的逻辑走
------解决方案--------------------
动态二维数组分配我一直都是这么写的
p=(char**)malloc(sizeof(char*)*m);
for(int i=0;i<m;++i)
{
p[m]=(char*)malloc(sizeof(char)*n);
}
用法跟二维数组p[m][n]一样
------解决方案--------------------
请问下大家都会为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的内存。
------解决方案--------------------
不管怎么说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