草庐IT

integer-overflow

全部标签

c++ - 整数除法溢出

问题我一直在考虑整数(int类型)溢出,我想到除法可能会溢出。示例:在我当前的平台上,我有INT_MIN==-INT_MAX-1因此INT_MIN因此INT_MIN/-1>-INT_MAX/-1因此INT_MIN/-1>INT_MAX.因此,除法(INT_MIN/-1)会溢出。问题所以,我有两个问题:可以编写什么(跨平台)C代码来防止除法溢出(对于类型(有符号)int)?哪些保证(在C或C++标准中)可能有助于设计代码?例如,如果标准保证我们拥有INT_MIN==-INT_MAX-1或INT_MIN==-INT_MAX,然后出现如下代码防止溢出。#include/*Trytodivid

c++ - 检查 C++ 中的下溢/溢出?

是否有通用的方法来检查给定数据类型(uint32、int等)的上溢或下溢?我正在做这样的事情:uint32a,b,c;...//initializea,b,cif(b当我在一些迭代后打印a时,它会显示一个大数字,例如:4294963846。 最佳答案 要检查算术上溢/下溢,请将结果与原始值进行比较。uint32a,b;//assignvaluesuint32result=a+b;if(result对于您的具体检查将是:if(a>(c-b)){//Underflow} 关于c++-检查C+

c++ - 不同的答案 : two simple identical integer calculations?

下面有两种情况,看似相同的操作,结果却相差1。我想我不需要解释编程,很简单。变量声明在前,场景1为1)和2=2),每个场景最后列出得到的结果。如有任何帮助,我们将不胜感激。intintWorkingNumber=176555;intintHundreds=1;intintPower=1;1)intintDeductionValue=(intHundreds*100*pow(1000,intPower));intWorkingNumber-=intDeductionValue;intWorkingNumber=765552)intWorkingNumber-=(intHundreds*1

解決element ui table的show-overflow-tooltip属性,设置其宽度

又是一个好几天的bug,可能是由于elementui版本网上很多方案不通,解决show-overflow-tooltip显示过长的问题el-table-columnwidth="240"prop="workSummary"header-align="center"align="center"label="工作总结"> template#default="scope">el-tooltipeffect="dark"placement="top">template#content>divclass="set-popper">{{scope.row.workSummary}}/div>/templa

c++ - 在递归 C++ 函数中捕获 "Stack Overflow"异常

是否可以在递归C++函数中捕获堆栈溢出异常?如果是,怎么办?那么在这种情况下会发生什么voiddoWork(){try(){doWork();}catch(...){doWork();}}我不是在寻找特定操作系统的答案。一般情况下 最佳答案 这本身并不是一个异常(exception),但如果您只是想将堆栈使用量限制在固定数量,您可以这样做:#include//Thesewillbesetatthetopofmain()staticchar*_topOfStack;staticint_maxAllowedStackUsage;intG

安全整数转换的 C++ 模板

我正在尝试编写一个C++模板函数,它将在不同整数类型、不同宽度和可能的有符号/无符号不匹配之间的转换中的整数溢出时抛出运行时异常。出于这些目的,我不关心从浮点类型到整数类型的转换,也不关心其他对象到对象的转换。我想这样做而不必编写大量特殊情况代码。这是我目前拥有的:templatevoidsafe_cast(constT&source,R&result){//getthemaximumsafevalueoftypeRRrMax=(R)~0;if(rMax(source);}这是否正确且有效?编辑:出于各种原因,STL不可用,所以我不能使用std::numeric_limits,而来自B

c++ - 为什么 clang 无法使用默认的 integer_sequence 实例化嵌套的可变参数模板?

考虑一个例子:#includetemplatestructpack{staticconstexprstd::size_tsize=sizeof...(Ts);};template>structipack;templatestructipack,std::index_sequence>{staticconstexprstd::size_tsize=sizeof...(Ts);};template>structvpack;templatestructvpack>,std::index_sequence>{staticconstexprstd::size_tsize=sizeof...(Ts

c++ - 如何在 unsigned int 和 int 之间安全地进行 static_cast?

我有一个8字符的string表示一个十六进制数,我需要将它转换为一个int。此转换必须保留字符串"80000000"及更高版本的位模式,即这些数字应为负数。不幸的是,天真的解决方案:inthex_str_to_int(conststringhexStr){stringstreamstrm;strm>val;returnstatic_cast(val);}如果val>MAX_INT(返回值为0),则对我的编译器不起作用。将val的类型更改为int也会导致较大数字为0。我已经尝试了SO上各种答案的几种不同解决方案,但尚未成功。这是我所知道的:我在OpenVMS上使用HP的C++编译器(我相

c - 重叠结构和 LARGE_INTEGER

我正在完成Windows系统编程的练习,但我没有完全理解LARGE_INTEGER和OVERLAPPED结构。例如,我在main中定义了以下结构。第一个结构用于跟踪记录数。第二个用于记录数据。作者定义并使用两个重叠结构来跟踪记录文件偏移量。typedefstruct_HEADER{DWORDnumRecords;DWORDnumNonEmptyRecords;}HEADER;/*8bytes*/typedefstruct_RECORD{DWORDreferenceCount;SYSTEMTIMErecordCreationTime;SYSTEMTIMErecordLastRefernc

SEEDLabs Buffer Overflow

SEEDLabsBufferOverflow实验原理攻击目标代码中含有以下代码片段:intbof(char*str){charbuffer[BUF_SIZE];strcpy(buffer,str);return1;}intmain(intargc,char**argv){charstr[517];intlength=fread(str,sizeof(char),517,stdin);bod(str);...return1;}fread()有长度限制,因此能保证str从stdin中读取517个字节;但函数intbof(char*)中,strcpy()并不会考虑长度限制,因此本来准备写入buffe