c/c++语言开发共享“EXC_BAD_ACCESS:无法恢复以前选择的帧”错误,数组大小?

我有一个算法来创建Eratosthenes的筛子并从中拉出素数。 它允许您输入筛子的最大值,算法为您提供低于该值的质数并将它们存储在c样式数组中。

问题:一切正常,值高达500.000,但是当我输入一个大值 – 运行时 – 它在xcode中给出了以下错误信息:

Program received signal: “EXC_BAD_ACCESS”. warning: Unable to restore previously selected frame. Data Formatters temporarily unavailable, will re-try after a 'continue'. (Not safe to call dlopen at this time.) 

我的第一个想法是我没有使用足够大的变量,但是当我使用’unsigned long long int’时,这应该不是问题。 此外,调试器将我指向我的代码中的一个点,其中数组中的一个点被赋值。 因此我想知道arrays有最大限制吗? 如果是:我应该使用NSArray吗? 如果不是,那么基于此信息导致此错误的原因是什么?

编辑:这是代码的样子(它不完整,因为它在发布的最后一行失败)。 我正在使用垃圾收集。

 /*--------------------------SET UP--------------------------*/ unsigned long long int upperLimit = 550000; // unsigned long long int sieve[upperLimit]; unsigned long long int primes[upperLimit]; unsigned long long int indexCEX; unsigned long long int primesCounter = 0; // Fill sieve with 2 to upperLimit for(unsigned long long int indexA = 0; indexA  upperLimit)) { //check off all multiples of prime for(unsigned long long int indexB = prime-2; indexB  500000 ++primesCounter; indexCEX = indexC + 1; } 

正如你可能会或可能不会看到的那样,我是一个非常初学者。 当然欢迎任何其他建议:)

    你没有溢出变量; 你堆满了。 当你创建一个像int myArray[500]这样的数组时,你就会在堆栈上声明500个int 。 正常堆栈大小为8 MB。 你的两个arrays大约是8.4 MB(8字节* 550000 /(1024 ^ 2)= 4.2 MB)。 你应该在这里使用堆内存(来自malloc() )。 所以它会是这样的:

     int upperLimit = 550000; unsigned long long *sieve = malloc(sizeof(long long) * upperLimit); unsigned long long *primes = malloc(sizeof(long long) * upperLimit); unsigned long long indexCEX; unsigned long long primesCounter = 0; 

    不要忘记,当你完成它或你最终会泄漏时,你需要free()内存。

    您正在使用堆栈上分配的数组。 如果使用动态内存分配,则可以分配更多内存:

     /* program setup */ unsigned long long *sieve = malloc(sizeof(*sieve) * upperLimit); unsigned long long *primes = /* -- "" -- */ /* etc, free() at program end */ 

    OS X系统的堆栈限制可能为8 MiB。 如果你的系统上的sizeof(unsigned long long) == 8 ,你将在堆栈中容纳两个500000元素数组,而不是两个550000元素数组。

    据我所知,当您尝试使用已释放的内存时,会收到“EXC_BAD_ACCESS”。 要调试它,您可以使用NSZombie类。 这可能会有所帮助: http : //www.cocoadev.com/index.pl ?DebuggingAutorelease

    我也有这个问题。 结果我有循环。 我偶然从内部调用了一种方法。

    需要了解更多c/c++开发分享“EXC_BAD_ACCESS:无法恢复以前选择的帧”错误,数组大小?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享“EXC_BAD_ACCESS:无法恢复以前选择的帧”错误,数组大小?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979611.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐