内存分配。。。。指针问题。。。急!!!
/*
#include <stdio.h>
#include <stdlib.h>
void main()
{
int a1 = 5;
int a2[ ] = {4,2,3,2,4};
int i,j;
int * * p_array; //也可以用int * p_array[ 5 ]
p_array = (int**)calloc(a1,sizeof(int *));
for(i=0; i<a1; i++)
p_array[i] = (int*)calloc(a2[i],sizeof(int));
for(i=0; i<a1; i++)
for(j=0; j<a2[i]; j++)
p_array[i][j] = 1+2*i*j;
for(i=0; i<a1; i++)
{
for(j=0; j<a2[i]; j++)
printf("%d ",p_array[i][j]);
printf("\n");
}
for(i=0; i<a1; i++)
free(p_array[i]);
free(p_array);
}
*/
#include<stdio.h>
#include<stdlib.h>
void main()
{
int a1=5;
int a2[]={4,2,3,2,4};
int i,j;
int **p;//int *p[5];
p=(int**)calloc(a1,sizeof(int *));
for(i=0;i<a1;i++)
*p=(int *)calloc(a2[i],sizeof(int));
for(i=0;i<a1;i++)
for(j=0;j<a2[i];j++)
**p=1+2*i*j;
for(i=0;i<a1;i++)
{for(j=0;j<a2[i];j++)
printf("%d ",**p);
printf("\n");
}
for(i=0;i<a1;i++)
free(*p);
free(p);
}
上面两个函数有啥区别?为什么上面的函数在vc6.0中能成功而下面的却不行??求大牛帮帮改改。。。谢谢!!!
[解决办法]
for(i=0;i<a1;i++)
free(p[i]); //最后这里写错了
free(p);
[解决办法]
#include<stdio.h>#include<stdlib.h>void main(){int a1=5;int a2[]={4,2,3,2,4};int i,j;int **p;//int *p[5]; p=(int**)calloc(a1,sizeof(int *));for(i=0;i<a1;i++)*(p + i)=(int *)calloc(a2[i],sizeof(int)); //怎么一直是*p呢?for(i=0;i<a1;i++)for(j=0;j<a2[i];j++)*(*(p + i) + j)=1+2*i*j; //这里for(i=0;i<a1;i++){for(j=0;j<a2[i];j++) printf("%d ",*(*(p + i) + j)); //这里printf("\n");}for(i=0;i<a1;i++)free(*(p + i)); //这里free(p);}