C ++ / VisualStudio2017:覆盖c4700编译错误

时间:2017-12-18 19:07:19

标签: c++

我正在为大学开展c ++项目,我在以下代码中遇到了未初始化指针的问题:

#include <iostream>
using namespace std;

struct t_coord {
    double valeur;
    int indice;
    t_coord *suiv;
};

struct t_vecteur {
    int dimension;
    double defaut;
    t_coord *tete;
};

void initialiser (t_vecteur tv, int dimension, double defaut) {
    tv.dimension = dimension;
    tv.defaut = defaut;
    tv.tete = nullptr;
}

int main () {
    t_vecteur tv;
    initialiser(tv, 5, 3.14);
    return 0;
}

无论如何都要在VisualStudio中覆盖c4700错误,这样我就可以使用我的初始化函数&#34; initialiser()&#34; ?最终的编译将在GNU上完成,它没有考虑未初始化的变量,并且在项目中指定我必须创建一个函数来初始化我的t_vecteur。

提前致谢

1 个答案:

答案 0 :(得分:1)

结构%run "DESeq2 Analysis.ipynb" aggregate,因此实例t_vecteur未初始化(tvdimensiondefaut,作为原始数据类型,包含不确定的数据。)

然后将 by-value 传递给函数tete,在创建副本时initialiser读取,从而调用未定义的行为

该标准的相关短语位于[dcl.init]/12

  

当获取具有自动或动态存储持续时间的对象的存储时,该对象具有不确定的值,并且如果没有对该对象执行初始化,则该对象将保留不确定的值,直到该值被替换为

     

如果评估产生不确定的值,则行为未定义

要解决此问题(以及C4700未初始化的变量警告),请将tv传递给tv by-reference

initialiser

传递引用不是从void initialiser (t_vecteur& tv, int dimension, double defaut) { 读取,因此不再是UB。

相关问题