筛选法求素数

本文介绍了一个用于筛选素数的算法,并详细展示了如何使用C语言中的动态内存分配函数,如malloc(), calloc(), realloc()和free(),来有效地管理内存。通过具体的代码示例,读者可以了解到这些函数的基本用法及常见错误,如内存头尾破坏、指针移动和重复释放等问题。
#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));
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值