基于malloc的数组和指针的混用问题...
一直对指针和数组一头雾水...结果又被赶鸭子上架写代码...
想问一下,下面的一段代码有问题吗
doubel *p;
int i;
p = (double *)mxMalloc(10 * sizeof(double));
if (NULL == p)
{
printf("Wrong in memory allocation");
}
for(i=0;i<10;i++)
p[i]=i;
free(p);
p=NULL;
这段代码基本是能运行的,但是我有点疑惑...
这里的指针p是指向了动态分配的10个地址的首地址,但是后面又写p[i]是把0到9赋值到了什么地方?是给p指向的10个地址分别赋值0到9吗?如果想实现“给p指向的10个地址分别赋值0到9”,应该怎么写比较好?
另外以上的写法会不会容易导致“Segmentation violation detected”的错误?
谢谢各位大大了ORZ...
[解决办法]
应该是按4字节4字节排列的吧,另外free(p)的话这个数据还怎么访问?
[解决办法]
malloc()为指针开辟十个double长度内存地址
for是把0—9依次存入数组p[0]~p[9]中
[解决办法]
大致无问题,不过
if (NULL == p)
{
printf("Wrong in memory allocation");
}
要return不然后边p为NULL必然出错
[解决办法]
[解决办法]
楼主既然已经知道p是指向了动态分配的10个地址的首地址,那剩下的就好理解了
比如,这个首地址的位置是40000,那p得内容就是40000,对吧?
然后p[1],p[2]。。。这种等价于p+1,p+2,p+3,
而p又是指向double的指针(double八字节),那p+1 = 40008,p+2 = 40016.。。。
然后这些个40000,40008,40016不就是那个数组的地址了吗
给p指向的10个地址分别赋值0到9
就lz这样写已经正确了,程序是对的,不会报段错误
[解决办法]
支持4楼,
1楼的疑问没有道理的,内存释放后,把指针置为NULL是个好习惯
[解决办法]
[解决办法]