微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

g++ 与 MS c++ 中的未初始化指针

如何解决g++ 与 MS c++ 中的未初始化指针

最近,我阅读了一个编码示例,其中解释了以下内容会导致 Visual Studio 中的编译器错误

import React,{ Component } from "react";
import { View,Text,SectionList } from "react-native";
import { Picker } from "@react-native-picker/picker";

export default class App extends Component {
  find_dimension(layout){
    const {x,y,width,height} = layout;
    console.warn(x);
    console.warn(y);
    console.warn(width);
    console.warn(height);
  }

  render(){
    return(
      <View>
        <Picker onLayout={(event) => {this.find_dimension(event.nativeEvent.layout)}}>
          <Picker.Item label="Java" value="java" />
          <Picker.Item label="JavaScript" value="js" />
        </Picker>
      </View>
    )
  }
}

作者声称,由于 int* pointer1; *pointer1 = 10; 在被取消引用之前未初始化,因此 Visual Studio 中出现以下错误

C4700:使用了未初始化的局部变量“pointer1”

而且确实如此。这个场景是有道理的。

但是,如果我使用完全相同的代码并使用 g++ 进行编译,则不会发生编译器错误并且我可以以任何正常方式自由使用 pointer1

为什么不同? g++ 是否在初始化之前为 pointer1 分配了地址?

解决方法

尝试将 -Wuninitialized -Werror 传递给 gcc。此外,-Wmaybe-uninitialized 可能有助于识别未初始化变量的执行路径。

附带说明:取消引用未初始化的指针是未定义的行为。这意味着编译器可以但不必诊断它。完全归咎于开发者。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。