#include <stdio.h>
#include <stdlib.h>
void Select(int n)
{
int *p=(int*)malloc(n*sizeof(int));//开辟内存空间
int i;
for(i=0;i<n;i++)
{
p[i]=1;//先将所有数置为1
}
p[0]=p[1]=0;//1和2都不是素数
for(i=2;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(j%i==0)
{
p[j]=0;//将不是素数的置为0
}
}
}
for(i=2;i<n;i++)
{
if(p[i]==1)
{
printf("%d ",i);//输出所有素数
}
}
printf("\n");
free(p);
}
int main()
{
//以下都是测试:
Select(10);
Select(20);
Select(30);
Select(40);
Select(50);
return 0;
}
动态内存:
malloc();
calloc();
realloc();
free();//容易崩溃的四种原因:1.破坏了内存的头;2.破坏了内存的尾;3.指针进行了移动,即找不到内存的头部;4.重复释放同一空间导致崩溃.
这四个函数必须要使用头文件<stdlib.h>.
申请十个整型单元格:
int n=10;
int *p=(int *)malloc(n*sizeof(int));
calloc()与malloc()的唯一不同就是calloc()可以将每个单元格置为0;realloc()是扩容函数,通常情况下使用的比较多.
int *p=(int *)malloc(2*n*sizeof(sizeof(int)));
//等同于
realloc(q,2*n*sizeof(int));
q=(int *)realloc(q,2*n*sizeof(int));
本文介绍了一个用于筛选素数的算法,并详细展示了如何使用C语言中的动态内存分配函数,如malloc(), calloc(), realloc()和free(),来有效地管理内存。通过具体的代码示例,读者可以了解到这些函数的基本用法及常见错误,如内存头尾破坏、指针移动和重复释放等问题。
1267

被折叠的 条评论
为什么被折叠?



