有关malloc函数分配空间的奇怪的有关问题

有关malloc函数分配空间的奇怪的问题

我用一个二级指针给矩阵的元素申请空间:
	M.mat = (float32**)malloc( row*sizeof(float32*) );
for(i=0;i<row;i++)
M.mat[i] = (float32*)malloc( col*sizeof(float32) );

但是发现分配的空间并不是连续的,
具体:
 每行的元素存储空间是连续的,但是行与行之间并不是连续的,中间间隔着一个随机的数据(相同矩阵该数据相等,不同矩阵该数据是不同的)
比如一个4*5的矩阵
1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
16,17,18,19,20
有关malloc函数分配空间的奇怪的有关问题
另一个4*5的矩阵
有关malloc函数分配空间的奇怪的有关问题
为什么行与行之间的存储空间就不连续呢? 这不是浪费了存储空间吗,或者这有其他的什么作用吗?

我用的是TI的DSP 28335   软件是CCS6.
------解决思路----------------------
不太明白楼主的意思
楼主想说两次分配行数据的内存不连续吗?
这是很正常的,内存分配的时候有一些预留的信息保留下来,一般放在申请的内存前面几个字节
还有就是申请的内存要对齐等等
------解决思路----------------------
想连续用:
M.mat = (float32*)malloc( row*col*sizeof(float32));
for(i=0;i<row;i++) for (j=0;j<col;j++) M.mat[i*col+j] = 0.0;
//...
free(M.mat);

------解决思路----------------------
堆是一个链表,链表的每个节点本来就是不连续的,需要空间用来存放上一个节点,下一个节点,和当前节点大小等信息,如果你想要连续,你可以自己申请一大块内存,自己去控制维护。
------解决思路----------------------
两次 malloc 的结果当然不是连续的。

如果要连续,就一次分配:


M.mat = (float32**)malloc( row*sizeof(float32*) );
float32 *buf = (float32 *)malloc(row*col*sizeof(float32));
for(i=0;i<row;i++)
    M.mat[i] = buf + i * col;

------解决思路----------------------
LINUX 程序设计第四版
P218页
分配两块内存并不会得到一个独立的可以连续寻址的内存块。你得到的是你所要求的:两个独立的内存块