X在此函数中未初始化使用

时间:2016-02-25 11:49:07

标签: c++ warnings

为什么我收到此警告?: 警告:'row1 [3]'在此函数中未初始化使用[-Wuninitialized] 我一直在谷歌上搜索一段时间,但我找不到任何答案,可能只是因为我无法在Google上搜索答案。

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int setfunc(int x);

int main()
{
    int row1[3]{0,0,0};
    setfunc(row1[3]);
}

int setfunc(int x[])
{
    string sub;
    int rowset;
    stringstream rs;
    string snums;
    int elementnum = sizeof(x) / sizeof(0);
    for(int z = 1; z <= elementnum; z++)
    {
        int find = snums.find(",");
        if(find == -1)break;
        else
        {
        sub = snums.substr(0, snums.find(","));
        rs << sub;
        rs >> rowset;
        snums.erase(0, snums.find(",") +1);
        }
        x[z] = rowset;
        cout << x[z] << endl;
    }
return 0;

}

所有帮助表示赞赏

1 个答案:

答案 0 :(得分:4)

int row1[3]{0,0,0}; setfunc(row1[3]);的行为未定义。这是因为索引从0到2运行,因此row1[3]正在访问其边界之外的数组。编译器在这里帮助你,虽然在我看来,这个警告有点误导。

sizeof(x) / sizeof(0);也不正确。 sizeof(0)的大小是int的大小,因为0int类型。正常的习语是sizeof(x) / sizeof(x[0])。但是你不能在你的情况下执行此操作,因为函数参数x衰减指针。你应该明确地将元素的数量传递给函数。