加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 隐式转换将signedness’int’更改为’unsigned int’

发布时间:2020-12-16 09:56:23 所属栏目:百科 来源:网络整理
导读:我正在使用clang来编译程序,我需要在clang中编译它而没有错误.我没有得到其他编译器的错误. 代码中的错误行是 memset(grid_,sizeof(int) * x_quadrants * y_quadrants); 整个功能是这样的: Ocean::Ocean(int num_boats,int x_quadrants,int y_quadrants){ g
我正在使用clang来编译程序,我需要在clang中编译它而没有错误.我没有得到其他编译器的错误.

代码中的错误行是

memset(grid_,sizeof(int) * x_quadrants * y_quadrants);

整个功能是这样的:

Ocean::Ocean(int num_boats,int x_quadrants,int y_quadrants)
{
  grid_ = new int[x_quadrants * y_quadrants];
  memset(grid_,sizeof(int) * x_quadrants * y_quadrants);
  x_quadrants_ = x_quadrants;
  y_quadrants_ = y_quadrants;
  boats_ = new Boat[num_boats];
  num_boats_ = num_boats;

  stats_.hits = 0;
  stats_.misses = 0;
  stats_.duplicates = 0;
  stats_.sunk = 0;
}

我正在使用memset所以当使用不同的驱动程序进行测试时,我不会得到垃圾值输出.没有必要为clang提供命令行,因为我不允许更改它.

解决方法

更换

grid_ = new int[x_quadrants * y_quadrants];
memset(grid_,sizeof(int) * x_quadrants * y_quadrants);

只是

grid_ = new int[x_quadrants * y_quadrants]();

注意括号,它告诉编译器你想要这个零初始化(或者真正的值初始化,这里减少为零初始化).

更好的是,使用std :: vector代替这种危险的DIY方案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读