草庐IT

signed-overflow

全部标签

memory - 将内存从 2GB 升级到 4GB 可以防止 Stack Overflow 异常吗?

我的电脑有2GB的RAM内存。当我在C#2008ExpressEdition中形成一个包含70.000个项目的数组的3D网格对象时,我收到错误消息“堆栈溢出异常处理...”。如果我将RAM内存从2GB升级到4GB,我可以克服这个错误消息吗? 最佳答案 几乎可以肯定不是。堆栈溢出(而不是内存不足)意味着您已经消耗了分配的stack空间-但堆栈(相对而言)很小。堆是所有事情发生的地方......选项:修复你的无限递归错误...将数据移动到数组/列表/一些基于堆的存储中(现在在哪里?)避免深度递归避免使用过大的结构...你有一些真正应该是

c++ - 有没有一种安全的方法来获取有符号整数的无符号绝对值,而不会触发溢出?

考虑一个典型的绝对值函数(为了论证,最大大小的整数类型是长的):unsignedlongabs(longinput);一个简单的实现可能看起来像:unsignedlongabs(longinput){if(input>=0){//inputispositive//Weknowthisissafe,becausethemaximumpositivesigned//integerisalwayslessthanthemaximumpositiveunsignedonereturnstatic_cast(input);}else{returnstatic_cast(-input);//uto

c++ - 有没有一种安全的方法来获取有符号整数的无符号绝对值,而不会触发溢出?

考虑一个典型的绝对值函数(为了论证,最大大小的整数类型是长的):unsignedlongabs(longinput);一个简单的实现可能看起来像:unsignedlongabs(longinput){if(input>=0){//inputispositive//Weknowthisissafe,becausethemaximumpositivesigned//integerisalwayslessthanthemaximumpositiveunsignedonereturnstatic_cast(input);}else{returnstatic_cast(-input);//uto

c++ - 视觉 C++ 2010 : Why "signed/unsigned mismatch" disappears if i add "const" to one comparand?

我有以下简单的C++代码:#include"stdafx.h"intmain(){inta=-10;unsignedintb=10;//Trivialerrorisplacedhereonpurposetotriggerawarning.if(a使用VisualStudio2010(默认C++控制台应用程序)编译,它给出warningC4018:'如预期的那样(代码有逻辑错误)。但如果我改变unsignedintb=10;进入constunsignedintb=10;警告消失!这种行为有什么已知的原因吗?gcc无论const如何,都会显示警告.更新我可以从评论中看到很多人建议“它只是以

c++ - 视觉 C++ 2010 : Why "signed/unsigned mismatch" disappears if i add "const" to one comparand?

我有以下简单的C++代码:#include"stdafx.h"intmain(){inta=-10;unsignedintb=10;//Trivialerrorisplacedhereonpurposetotriggerawarning.if(a使用VisualStudio2010(默认C++控制台应用程序)编译,它给出warningC4018:'如预期的那样(代码有逻辑错误)。但如果我改变unsignedintb=10;进入constunsignedintb=10;警告消失!这种行为有什么已知的原因吗?gcc无论const如何,都会显示警告.更新我可以从评论中看到很多人建议“它只是以

c++ - 内存: "signed char *" vs "unsigned char *"的字节读取

人们经常需要一次从内存中读取一个字节,就像在这个幼稚的memcpy()中一样实现:void*memcpy(void*dest,constvoid*src,size_tn){char*from=(char*)src;char*to=(char*)dest;while(n--)*to++=*from++;returndest;}但是,我有时会看到人们明确使用unsignedchar*而不仅仅是char*.当然,char和unsignedchar可能不相等。但是我是否使用char*有区别吗?,signedchar*,或unsignedchar*什么时候按字节读/写内存?更新:实际上,我完全知

c++ - 内存: "signed char *" vs "unsigned char *"的字节读取

人们经常需要一次从内存中读取一个字节,就像在这个幼稚的memcpy()中一样实现:void*memcpy(void*dest,constvoid*src,size_tn){char*from=(char*)src;char*to=(char*)dest;while(n--)*to++=*from++;returndest;}但是,我有时会看到人们明确使用unsignedchar*而不仅仅是char*.当然,char和unsignedchar可能不相等。但是我是否使用char*有区别吗?,signedchar*,或unsignedchar*什么时候按字节读/写内存?更新:实际上,我完全知

c++ - 是否有一个表达式使用模来进行反向环绕 ("reverse overflow")?

对于任何受范围R=[x,y]限制的整数输入W,“溢出”,由于没有更好的术语,W超过R是W%(y-x+1)+x。如果W超过y,这会导致它回绕。作为这个原则的一个例子,假设我们遍历一个日历的月份:intthis_month=5;intnext_month=(this_month+1)%12;其中两个整数都介于0和11之间,包括0和11。因此,上面的表达式将整数“钳制”在R=[0,11]的范围内。这种使用表达式的方法简单、优雅且有利,因为它省略了分支。现在,如果我们想做同样的事情,但反过来呢?以下表达式有效:intlast_month=((this_month-1)%12+12)%12;但它

c++ - 是否有一个表达式使用模来进行反向环绕 ("reverse overflow")?

对于任何受范围R=[x,y]限制的整数输入W,“溢出”,由于没有更好的术语,W超过R是W%(y-x+1)+x。如果W超过y,这会导致它回绕。作为这个原则的一个例子,假设我们遍历一个日历的月份:intthis_month=5;intnext_month=(this_month+1)%12;其中两个整数都介于0和11之间,包括0和11。因此,上面的表达式将整数“钳制”在R=[0,11]的范围内。这种使用表达式的方法简单、优雅且有利,因为它省略了分支。现在,如果我们想做同样的事情,但反过来呢?以下表达式有效:intlast_month=((this_month-1)%12+12)%12;但它

c++ - 不明白 "assuming signed overflow"警告

我得到:warning:assumingsignedoverflowdoesnotoccurwhenassumingthat(X+c)在这一行:if(this->m_PositionIndex[in]m_EndIndex[in])m_PositionIndex和m_EndIndex类型itk::Index(http://www.itk.org/Doxygen/html/classitk_1_1Index.html),以及他们的operator[]返回signedlong.(这里是第37行:https://github.com/Kitware/ITK/blob/master/Module