2016-02-25 55 views
0

爲什麼我得到此警告?: 警告:'row1 [3]'在此函數中未初始化使用[-Wuninitialized] 我一直在使用Google搜索一段時間,但是我找不到任何答案,可能只是因爲我無法在Google上搜索答案。X在此函數中未初始化使用

#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; 

}

所有幫助表示讚賞

回答

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腐朽成爲一個指針。你應該明確地將這些元素傳遞給函數。

+0

在這種情況下,sizeof的目標是傳入一個數組,是不是會返回一個指針的大小? – WearyWanderer

+0

是的,你是對的。傳遞給函數時大小信息丟失。 – Bathsheba

+0

感謝您的幫助:) – AdminBenni

相關問題