为什么我收到此警告?: 警告:'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;
}
所有帮助表示赞赏
答案 0 :(得分:4)
int row1[3]{0,0,0}; setfunc(row1[3]);
的行为未定义。这是因为索引从0到2运行,因此row1[3]
正在访问其边界之外的数组。编译器在这里帮助你,虽然在我看来,这个警告有点误导。
sizeof(x) / sizeof(0);
也不正确。 sizeof(0)
的大小是int
的大小,因为0
是int
类型。正常的习语是sizeof(x) / sizeof(x[0])
。但是你不能在你的情况下执行此操作,因为函数参数x
将衰减指针。你应该明确地将元素的数量传递给函数。