繁体   English   中英

C-内存重新分配错误

[英]C - memory realloc error

我是编程的新手,这是一个可以找出限制内所有素数的程序。 但是,出现错误提示:

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”。 我怀疑这与“重新分配”功能有关。 到底是什么问题以及如何修复代码? 谢谢!

#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));
}
}

重新分配将只为2个新元素分配空间,但是您假定它为3个新元素分配空间。

建议的更改(在expandMem中):

unsigned long* newPtr=(unsigned long*)realloc(primePtr, (count+1+unit)*sizeof(unsigned    long));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM