我正在学习C语言中的内存,我正在尝试将质数保存在指针prime_numers中。但它并没有起作用。很抱歉,我不能解释更多,因为我的英语水平太短了。请帮帮这个苦苦挣扎的学生。
#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;
}发布于 2020-11-19 22:04:35
您仅为一个元素进行了分配。可以使用realloc对先前分配的数组进行光晕处理。
此外,使用%d打印指针将调用未定义的行为。要通过printf()打印指针,应将指针转换为void*并使用%p。
修复代码(省略错误检查):
#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。
https://stackoverflow.com/questions/64913238
复制相似问题