#include
#include
int main(void)
{
int *a=NULL;
int i;
int temp=0;
a=malloc(sizeof(int)*10);/*动态创建一个有10个int元素的数组*/
if (a==NULL) { /*a==NULL表示空间分配失败*/
fprintf(stderr,"MEMORY ERROR");
return -1;
}
printf("输入10个数:");
for(i=0;i<10;i++)
{
scanf("%d ",a[i]);
}
for (i=0;i<10;i++) {
for (int j=0;j <9-i; j++){
if (a[j]>a[j+1]){
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}/*对数组进行操作*/
}
printf("排序后输出:");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
free(a);/*动态分配的空间需要用free()函数释放*/
return 0;
}
做链表,然后插入或者冒泡排序。
两次连续的malloc并不保证地址的连续,只有一次malloc分配多个,才能保证内存地址的连续性。
这个在malloc的官方说明里面有提到,作为内存管理的优化设计,是寻找最合理的空间大小去分配,因为空闲内存是不连续的,如果分配的大小刚好是某个空闲区块大小,则优先。