Skip to content

Commit

Permalink
精炼辞句
Browse files Browse the repository at this point in the history
  • Loading branch information
brotherbeer authored Feb 3, 2022
1 parent ca23db4 commit d70e27d
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 7 deletions.
2 changes: 1 addition & 1 deletion c-cpp-rules.json
Original file line number Diff line number Diff line change
Expand Up @@ -1629,7 +1629,7 @@
"ID_multiAllocation": {
"checkPoint": "在一个表达式语句中最多使用一次 new",
"level": "warning",
"comment": "在对象化资源管理的基础上,如果表达式语句多次使用 new,一旦某个构造函数抛出异常,仍会造成内存泄漏",
"comment": "如果表达式语句多次使用 new,一旦某个构造函数抛出异常,会造成内存泄漏",
"tag": "resource",
"reference": "C++ Core Guidelines R.13"
},
Expand Down
12 changes: 6 additions & 6 deletions c-cpp-rules.md
Original file line number Diff line number Diff line change
Expand Up @@ -1184,7 +1184,7 @@ lstrcat、lstrcatA、lstrcatW、lstrcpy、lstrcpyA、lstrcpyW
示例:
```
char buf[100];
gets(buf); // Non-compliant
gets(buf); // Non-compliant
```
例中 gets 函数无法检查缓冲区的大小,一旦输入超过了 buf 数组的边界,程序的数据或流程就会遭到破坏,这种情况也会成攻击者的常用手段,可参见 ID\_bufferOverflow 的进一步说明。如果代码中存在 gets 等函数,可以直接判定程序是有漏洞的。

Expand Down Expand Up @@ -1424,7 +1424,7 @@ const char* fmt = foo();
....
printf(fmt, a, b, c); // Non-compliant
```
例中格式化字符串 fmt 是变量,这种方式较为严重地降低了代码的可读性,而且要注意如果 fmt 可受外界影响,则可能被攻击者利用造成不良后果。
例中格式化字符串 fmt 是变量,这种方式可读性较差,而且要注意如果 fmt 可受外界影响,则可能被攻击者利用造成不良后果。

应将 fmt 改为常量:
```
Expand Down Expand Up @@ -1976,7 +1976,7 @@ std::move 宣告对象的数据即将被转移到其他对象,转移之后对
```
string foo(string a) {
string b = std::move(a);
return a; // Non-compliant
return a + b; // Non-compliant
}
```
例中 a 对象的数据被转移到 b 对象,之后 a 对象不再有效,对 a 重新赋值之前访问 a 属于逻辑错误。
Expand Down Expand Up @@ -2226,7 +2226,7 @@ ID_multiAllocation     :drop_of_blood: resource warning

<hr/>

在对象化资源管理的基础上,如果表达式语句多次使用 new,一旦某个构造函数抛出异常,仍会造成内存泄漏
如果表达式语句多次使用 new,一旦某个构造函数抛出异常,会造成内存泄漏

示例:
```
Expand Down Expand Up @@ -2367,7 +2367,7 @@ ID_dynamicAllocation&emsp;&emsp;&emsp;&emsp;&nbsp;:drop_of_blood: resource warni

<hr/>

标准库提供的动态内存分配方法,其算法或策略不在使用者的控制之内,很多细节是标准没有规定的,而且也是内存耗尽等问题的根源,有高可靠性要求的嵌入式系统应选取本规则
标准库提供的动态内存分配方法,其算法或策略不在使用者的控制之内,很多细节是标准没有规定的,而且也是内存耗尽等问题的根源,有高可靠性要求的嵌入式系统应避免动态内存分配

在内存资源有限的环境中,由于难以控制具体的分配策略,很可能会导致已分配的空间用不上,未分配的空间不够用的情况。而在资源充足的环境中,也应尽量避免动态分配,如果能在栈上创建对象,就不应采用动态分配的方式,以提高效率并降低资源管理的复杂性。

Expand All @@ -2378,7 +2378,7 @@ void foo() {
....
}
```
例中 vector 容器使用了动态内存分配方法,容量的增长策略可能会导致内存空间的浪费,使程序难以稳定运行
例中 vector 容器使用了动态内存分配方法,容量的增长策略可能会导致内存空间的浪费,甚至使程序难以稳定运行
<br/>
<br/>

Expand Down

0 comments on commit d70e27d

Please sign in to comment.