读书人

基于malloc的数组和指针的混用有关问题

发布时间: 2012-04-11 17:42:33 作者: rapoo

基于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必然出错
[解决办法]

探讨

引用:
应该是按4字节4字节排列的吧,另外free(p)的话这个数据还怎么访问?

你的意思是说在p的地址后面四字节四字节的0到9地赋值的吗?也就是说我申请的被p指向的十个地址根本就没有被用到?
free(p)就是为了和上面malloc相呼应,嘿嘿,就当这个函数就只想实现给p指向的十个内存赋值0到9好啦,嘿嘿~

谢谢你哦O(∩_∩)O~

[解决办法]
楼主既然已经知道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是个好习惯
[解决办法]
探讨

引用:
引用:

引用:
应该是按4字节4字节排列的吧,另外free(p)的话这个数据还怎么访问?

你的意思是说在p的地址后面四字节四字节的0到9地赋值的吗?也就是说我申请的被p指向的十个地址根本就没有被用到?
free(p)就是为了和上面malloc相呼应,嘿嘿,就当这个函数就只……

[解决办法]
探讨
一直对指针和数组一头雾水...结果又被赶鸭子上架写代码...
想问一下,下面的一段代码有问题吗

doubel *p;
int i;
p = (double *)mxMalloc(10 * sizeof(double));
if (NULL == p)
{
printf("Wrong in memory allocation");
……

读书人网 >C语言

热点推荐