结构体的声明
struct IMPERIAL{
int **my_map;
int numVar;
void(*initialMap)(int **, int );
void(*clearMap)(int **, int );
};
void myInitialMap(int **my_map, int n)
{
my_map = (int **)malloc(sizeof(int*) * n);
for(int i=0;i<n;++i){
my_map[i] = (int*)malloc(sizeof(int) * n);
}
int count=0;
}
void myClearMap(int **my_map, int n)
{
for(int i=0;i<=n;i++) free(*(my_map + i));
free(my_map);
}
初始化
int node;
char myInput[10];
for(int j=2;j<=item.numVar;j++)
for(int i=1;i<j;i++){
scanf("%s",myInput);
int b;
if(myInput[0]!='x')
{
sscanf(myInput,"%d",&node);
item.my_map[j][i]=node;
item.my_map[i][j]=item.my_map[j][i];
}
}
每次一到 item.my_map[j][i]=node; 程序就崩溃了,不知道什么原因啊
编译过了,没有报错,执行到这一步程序就会直接卡住
void myInitialMap(int **my_map, int n)
{
my_map = (int **)malloc(sizeof(int*) * n); // 这句对传入的参数my_map没有影响
for(int i=0;i<n;++i){
my_map[i] = (int*)malloc(sizeof(int) * n);
}
int count=0;
}
这一段代码有问题,应该改为
void myInitialMap(int ***my_map, int n) // 调用的时候使用&item.my_map
{
*my_map = (int **)malloc(sizeof(int*) * n);
for(int i=0;i<n;++i){
(*my_map)[i] = (int*)malloc(sizeof(int) * n);
}
int count=0;
}
二级指针操作:
item.my_map[j][i]=node;
改成这种样式:
*((int *)a +i*n +j )//n表示第二维数组长度,即列宽