gpt4 book ai didi

c - 动态内存阵列使可执行文件崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:10 25 4
gpt4 key购买 nike

我有这个代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{

int num,i,k,tamano,cont=0;

int *prim;
scanf("%d",&num);
num=num+1;
prim = malloc(num * sizeof(int));


for(i=1;i<num;i++)
prim[i] = 1;

for(i=2;i<=sqrt(num);i++){
if((prim[i])!=0 ){
for(k=2;i*k<num;k++)
prim[k*i]=0;
}
}

for(i=2;i<num;i++)
if(prim[i])
printf("%5d",i);

free(num);
}

此代码用于确定从 2 到 num 的素数,使用埃拉托色尼筛算法。

但是我有一个问题,当我输入一个像 15 这样的数字时可执行文件崩溃,我不知道是什么问题。如果我使用静态数组,程序运行完美,但当我放置动态内容时,可执行文件无缘无故崩溃。

它可以是什么?

最佳答案

您正在释放整数 num 而不是指针 prim。你的最后陈述应该是:

free(prim);

释放整数将导致运行时将整数值解释为内存地址并尝试访问它。这会导致执行未知行为,很可能是 protected 内存违规,从而导致程序崩溃。

关于c - 动态内存阵列使可执行文件崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25320657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com