Я новичок в программировании и вот программа, которая может узнать все простые числа в пределах лимита. Тем не менее, есть ошибка, которая говорит:C - ошибка памяти realloc
Prime 2(1682,0x7fff76316310) malloc: *** error for object 0x1002000a0: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug'
Кроме того, Xcode сообщает вопрос говорит: "сигнал SIGABRT. Я подозреваю, что это имеет какое-то отношение к функции realloc. В чем проблема и как исправить код? Спасибо!
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
const int unit=3;
unsigned long* expandMem(unsigned long *primePtr, unsigned long count){
unsigned long* newPtr=(unsigned long*)realloc(primePtr, (count+unit)*sizeof(unsigned long));
return newPtr;
}
int main(){
unsigned long limit;
unsigned long count=0;
unsigned long* primePtr=(unsigned long*)malloc(sizeof(unsigned long)*unit);
*primePtr=2;
printf("Input the upper limit >>> ");
scanf("%ld",&limit);
for (unsigned long int number=3; number<=limit; number+=2) {
bool isPrime=true;
for (unsigned long i=0; (*(primePtr+i))*(*(primePtr+i))<=number; i++) {
if (number%(*(primePtr+i))==0) {
isPrime=false;
break;
}
}
if (isPrime) {
count++;
*(primePtr+count)=number;
if (count%unit==2) {
primePtr=expandMem(primePtr, count);
}
}
}
for (unsigned long i=0; i<=count; i++) {
printf("%ld ",*(primePtr+i));
}
}
[Пожалуйста, не бросайте возвращаемое значение 'таНос()' и друзей, в C] (http://stackoverflow.com/a/605858/28169). Кроме того, для удобочитаемости вы должны * действительно * заменить все случаи '* (p + i)' на 'p [i]'. – unwind
@unwind Должно ли отличное значение realloc()? –
Для начала заменим все вхождение '* (primePtr + x)' на 'primePtr [x]'. Это делается только для улучшения удобочитаемости кода. –