学习C时的一个问题,指针数组,然后malloc给每个指针申请内存再赋值然后再打印,最后报错,没想明白

请各位帮小弟解答一下一个问题,多谢,我通过打断点最后发现是在i=8,j=8的时候有错了,但是没有想明白,请各位高手帮忙解答一下,多谢

#include <stdio.h>
#include <malloc.h>
main ()
{
int *p[9];
int i,j;
for (i=0;i<9;i++)
{
p[i]=(int *)malloc(i+1);
for (j=0;j<i+1;j++)
{
p[i][j]=j;
}
}
for (i=0;i<9;i++)
{
for (j=0;j<i+1;j++)
{
printf("%d",p[i][j]); //当i=8,j=8后在这里就报错了,想不明白
}
printf("\n");
}
for (i=0;i<9;i++)
{
free(p[i]);
}
}

p[i]=(int *)malloc(i+1);这里不对

改成p[i]=(int *)malloc(sizeof(int)*(i+1)); int 在32位机是4个字节

#include <stdio.h>
#include <malloc.h>
void main ()
{
int *p[9];
int i,j;
for (i=0;i<9;i++)
{
p[i]=(int *)malloc(sizeof(int)*(i+1));
for (j=0;j<i+1;j++)
{
p[i][j]=j;
}
}
for (i=0;i<9;i++)
{
for (j=0;j<i+1;j++)
{
printf("%d",p[i][j]); //当i=8,j=8后在这里就报错了,想不明白
}
printf("\n");
}
for (i=0;i<9;i++)
{
free(p[i]);
}
getchar();
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-10
在动态申请存储空间时,在不确定数据类型所占字节数的情况下用sizeof求得,即改为p〔i〕=(int*)malloc(sizef(int)*(i 1))。
相似回答
大家正在搜