二维数组的内存分配问题,高手进。

来源:百度知道 编辑:UC知道 时间:2024/06/04 11:37:27
我定义了二维数组:char BookName[MAX][30]
那我要怎麼分配内存呢?
这样提示错误:
for(k=0;k<MAX;k++)
{
if((BookName[k]=(char*)malloc(sizeof(char)*30))==NULL)
{
puts("out of memory");
exit(1);
}
}
我的编译器提示错误为:Lvalue required.
如果数组是自动分配内存的,为什麼程序执行到最后会提示指针错误?

数组是自动分配内存的
------------------------
#define MAX 100
char BookName[MAX][30];//已经分配内存了,可以存储MAX个字符串,每个字符串长度不超过29

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int a[3];
a = (int *)malloc(sizeof(int) * 3);/*这里就有左值错误,数组定义时已经分配空间,程序中不能给数组名赋值*/

int *b;
b = (int *)malloc(sizeof(int) * 3);/* 正确; b 相当于a[3] */

修正如下:
////////////////////////
#include <stdio.h>
#include <stdlib.h>
#define MAX 5
void main()

{
int k;
char *BookName[MAX];
for(k=0;k<MAX;k++)
{
if((BookName[k]=malloc(sizeof(char)*30))==NULL)
{
puts("out of memory");
exit(1);
}
}
}

//////////////////////////
网友zubyzuby所说的意思是:数组BookName[MAX][30]在定义时已经分配了空间,因为不需要再用malloc()函数动态分配了!