首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在分配和使用内存时找不到逻辑错误

在分配和使用内存时找不到逻辑错误
EN

Stack Overflow用户
提问于 2020-11-19 21:59:40
回答 1查看 24关注 0票数 0

我正在学习C语言中的内存,我正在尝试将质数保存在指针prime_numers中。但它并没有起作用。很抱歉,我不能解释更多,因为我的英语水平太短了。请帮帮这个苦苦挣扎的学生。

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int Modulation(unsigned int);

int main()
{
    int *prime_numbers;
    int a = 1;
    prime_numbers = &a;
    int count = 2;
    int p_count = 1;

    int num = 10;

    while(count<=num)
    {
        if(Modulation(count) == 1)
        {
            prime_numbers = malloc(sizeof(int));
            printf("this is count %d\n", count);
            printf("this is prime_numbers + p_count %d\n", prime_numbers+p_count);
            printf("this is p_count %d\n\n", p_count);
            *(prime_numbers+p_count) = count;
            p_count += 1;
        }
        count += 1;
    }

    for(int i=0 ; i<p_count ; i++)
    {
        printf("%d ", *(prime_numbers+i));
    }
    printf("\n\nThis is p_count %d", p_count);
    free(prime_numbers);
    return 0;
}

int Modulation(unsigned int num)
{
    unsigned int count = 2;
    while(count < num)
    {
        if(num%count == 0)
        {
            return 0;
        }
        count += 1;
    }
    return 1;
}
EN

回答 1

Stack Overflow用户

发布于 2020-11-19 22:04:35

您仅为一个元素进行了分配。可以使用realloc对先前分配的数组进行光晕处理。

此外,使用%d打印指针将调用未定义的行为。要通过printf()打印指针,应将指针转换为void*并使用%p

修复代码(省略错误检查):

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int Modulation(unsigned int);

int main()
{
    int *prime_numbers = malloc(sizeof(int));
    int a = 1;
    prime_numbers[0] = a;
    int count = 2;
    int p_count = 1;

    int num = 10;

    while(count<=num)
    {
        if(Modulation(count) == 1)
        {
            prime_numbers = realloc(prime_numbers, sizeof(int) * (p_count + 1));
            printf("this is count %d\n", count);
            printf("this is prime_numbers + p_count %p\n", (void*)(prime_numbers+p_count));
            printf("this is p_count %d\n\n", p_count);
            *(prime_numbers+p_count) = count;
            p_count += 1;
        }
        count += 1;
    }

    for(int i=0 ; i<p_count ; i++)
    {
        printf("%d ", *(prime_numbers+i));
    }
    printf("\n\nThis is p_count %d", p_count);
    free(prime_numbers);
    return 0;
}

int Modulation(unsigned int num)
{
    unsigned int count = 2;
    while(count < num)
    {
        if(num%count == 0)
        {
            return 0;
        }
        count += 1;
    }
    return 1;
}

我只修复了未定义的行为,但是您的代码有另一个逻辑错误:1在数组prime_numbers中,但1不是prime number

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64913238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档