C++最危险的代码,未做准备,请勿使用。不然只会在最后害了自己

晓晓 84 0

搬瓦工官网(国内无法打开,需要梯子)https://bandwagonhost.com
搬瓦工官网中国镜像站https://bwh81.net(搬瓦工官方网站,放心访问)
搬瓦工官方中文网https://bwh86.net
搬瓦工官网所有方案以及库存监控页面https://bwh86.net/monitor
最新搬瓦工最大优惠力度优惠码(循环优惠6.58%):BWHNCXNVXV
搬瓦工新用户注册和图文购买教程点击查看

我认为C ++中最危险的代码行是这样的:

Fred[8472] = 8743872; 

这看起来平平无奇,但是如果Fred定义为具有8000个元素,那么该行代码将尝试将整数8743872写入RAM中的某个未知位置。从中得出的结果几乎可以是任何东西。

如果幸运的话,操作系统(或程序本身)将识别出已尝试进行非法的内存访问,它将在屏幕上显示一条错误消息,并且程序将终止。

如果您不走运,可以将整数写在随后执行的代码之上,几乎任何事情都可能发生。伪造的代码可能会损坏关键的操作系统文件,或者广播对某人的侮辱性侮辱。将存储在你电脑的任何东西公布在外等等。

所以不要那样做。如果您觉得必须在C或C ++中使用数组,请务必仔细检查边界。无论您做什么,都不要编写这样的程序:

#include <stdio.h> int main(void) {   int Fred [505] = {0};   Fred[634] = 87592;   printf(“ Fred [634] =%d \ n”,Fred [634]);   return 0; }

在我的系统上,即使带有沉重的警告标志,我的编译器(gcc / g ++)也会在没有错误或警告的情况下进行编译!而且它运行时没有错误或警告,并给出了预期的结果!但是源代码正在提交非法的内存访问,并命令覆盖它实际上并不拥有的内存!

那么,为什么不引起编译器警告和/或运行时错误呢?因为优化!编译器看到我甚至没有接近填充数组,便默默地将“ 87592”的索引从“ 634”更改为“ 0”。

但,如果几年后有人更改了程序怎么办?所做的更改可能会带来灾难性的后果,导致编译器无法进行优化:

#include <cstdio> int main(void) {   int Fred [500];   int i   for(i = 0; i <100000; ++ i)   {      Fred [i] = i;   }   printf(“ Fred [34927] =%d \ n”,Fred [34927]);   return 0; }

编译字符串:

g ++ -I / rhe / include -D PLATFORM_IS_WIN64 -Wall -Wextra -Wfloat-equal -Wshadow -Wcast-qual -Wcast-align -Wconversion -Wcomments -Wundef -Wunused-macros -Wold-style-cast -Woverloaded-virtual -finput -charset = UTF-8 -std = gnu ++ 14 -s -O2 evil-test-2.cpp -L / rhe / lib64 -L / lib -L / usr / lib -lm -o / rhe / bin64 / test /evil-test-2.exe

编译器警告问题:

evil-test-2.cpp: In function ‘int main()’: evil-test-2.cpp:9:15: warning: iteration 500 invokes undefined behavior [-Waggressive-loop-optimizations]       Fred[i] = i;       ~~~~~~~~^~~ evil-test-2.cpp:7:20: note: within this loop    for ( i = 0 ; i < 100000 ; ++i )                  ~~^~~~~~~~ evil-test-2.cpp:11:10: warning: array subscript is above array bounds [-Warray-bounds]    printf("Fred[34927] = %d\n", Fred[34927]);    ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

运行时结果:

$ evil-test-2 Segmentation fault (core dumped)

这次,编译器无法优化问题,一切都崩溃了。

所以,千万不能指望总是能逃脱马虎代码!没有任何编程语言!出于各种原因,您也许可以在短期内摆脱困境(例如,如上例所示,通过编译器优化为您修复错误),但从长期来看,它会再次咬住您,以非常糟糕的方式(程序崩溃,系统崩溃,硬件损坏,数据丢失,财务损失或甚至更糟)。所以不要那样做!

特别地,在C ++编程语言中,除非绝对需要,否则您根本不应该使用数组或指针,除非您知道自己在做什么并且正在使用仔细且频繁的边界检查。而是使用“标准模板库”(简称“ STL”)提供的“容器”,“迭代器”和“算法”。STL存在,可以使用,如果您使用C ++编写,则应大量使用它。具体来说,在C中要使用数组的大多数事物都使用“矢量”模板。对矢量对象(而不是[花括号])使用“ .at()”方法来调用自动边界检查。

搬瓦工机房方案整理

搬瓦工目前提供了4个方案,包括搬瓦工KVM方案搬瓦工CN2 GT方案搬瓦工CN2 GIA-E方案搬瓦工香港方案,每种方案有多种套餐配置,详细的配置和价格整理如下:
套餐名称 CPU 内存大小 硬盘容量 每月流量 带宽 价格/年 购买链接
搬瓦工CN2-E限量版(搬瓦工补货通知群(禁言,仅推送):903230558)
CN2 GIA LIMITED EDITION 1核 1 GB 10 GB 500 GB 1 Gbps $89.99 立即购买
搬瓦工CN2 GT方案
CN2 1核 1024 MB 20 GB 1000 GB 1 Gbps $49.99 立即购买
CN2 1核 2048 MB 40 GB 2000 GB 1 Gbps $99.99 立即购买
CN2 2核 4096 MB 80 GB 3000 GB 1 Gbps $199.99 立即购买
CN2 2核 8 GB 160 GB 5000 GB 1 Gbps $399.99 立即购买
CN2 3核 16 GB 320 GB 8000 GB 1 Gbps $799.99 立即购买
CN2大流量 3核 16 GB 320 GB 12000 GB 1 Gbps $899.99 立即购买
CN2大流量 3核 16 GB 320 GB 16000 GB 1 Gbps $1299.99 立即购买
搬瓦工CN2 GIA-E方案(可选搬瓦工DC9 CN2 GIA,搬瓦工DC6 CN2 GIA,搬瓦工日本大阪软银线路)
CN2 GIA ECOMMERCE 2核 1 GB 20 GB 1000 GB 2.5 Gbps $169.99 立即购买
CN2 GIA ECOMMERCE 3核 2 GB 40 GB 2000 GB 2.5 Gbps $299.99 立即购买
CN2 GIA ECOMMERCE 4核 4 GB 80 GB 3000 GB 2.5 Gbps $549.99 立即购买
CN2 GIA ECOMMERCE 6核 8 GB 160 GB 5000 GB 5 Gbps $879.99 立即购买
CN2 GIA ECOMMERCE 8核 16 GB 320 GB 8000 GB 5 Gbps $1599.99 立即购买
CN2 GIA ECOMMERCE 10核 32 GB 640 GB 10000 GB 10 Gbps $2759.99 立即购买
CN2 GIA ECOMMERCE 12核 64 GB 1280 GB 12000 GB 10 Gbps $5399.99 立即购买
搬瓦工香港方案
香港CN2 GIA 2核 2048 MB 40 GB 500 GB 1 Gbps $899.99 立即购买
香港CN2 GIA 4核 4096 MB 80 GB 1000 GB 1 Gbps $1559.99 立即购买
香港CN2 GIA 6核 8192 MB 160 GB 2000 GB 1 Gbps $2999.99 立即购买
香港CN2 GIA 6核 16384 MB 320 GB 4000 GB 1 Gbps $5899.99 立即购买
搬瓦工日本方案
日本CN2 GIA 2核 2048 MB 40 GB 500 GB 1.2 Gbps $899.99 立即购买
日本CN2 GIA 4核 4096 MB 80 GB 1000 GB 1.2 Gbps $1559.99 立即购买
日本CN2 GIA 6核 8192 MB 160 GB 2000 GB 1.2 Gbps $2999.99 立即购买
日本CN2 GIA 6核 16384 MB 320 GB 4000 GB 1.2 Gbps $5899.99 立即购买
搬瓦工KVM方案
KVM 2核 1024 MB 20 GB 1 TB 1 Gbps $49.99 立即购买
KVM 3核 2 GB 40 GB 2 TB 1 Gbps $99.99 立即购买
KVM 4核 4 GB 80 GB 3 TB 1 Gbps $199.99 立即购买
KVM 5核 8 GB 160 GB 4 TB 1 Gbps $399.99 立即购买
KVM 6核 16 GB 320 GB 5 TB 1 Gbps $799.99 立即购买
KVM 7核 24 GB 480GB 6 TB 1 Gbps $1,199.99 立即购买

标签: 国外云服务器 香港服务器 美国服务器 搬瓦工VPS

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~