2012-11-27 19 views
0
void OneDToTwoD(char* rel){ 

    /* all the declarations here */ 

    while(rel[i] != '\0'){ 
    i++; 
    } 

... 

在上面的代碼中,我得到了所有「有時」的分段錯誤。並valgrind檢查拋出「無效的讀取大小1」在我在線 while(rel[i] != '\0'){查找陣列指針的長度-Valgrind錯誤:無效的讀取大小爲1

在該行,我試圖找出長度爲rel。 我知道必須有更好的方法來做到這一點。我不能只做sizeof可以嗎?

+1

我假設我從0開始? (沒有在你的代碼中顯示,C不會很好的默認)。爲什麼不使用'strlen()'? – John3136

+3

這段代碼中有很多東西可能會導致問題。數組相對多大?您應該將數組大小傳遞給'OneDToTwoD',因爲在函數內部沒有保證以null結尾的方式。我從哪裏開始?它是否初始化爲0? –

+0

是否所有'rel'都調用函數'OneDToTwoD'調用,終止於''\ 0''? – Rohan

回答

2

如果i被初始化爲零,並且rel被指向有效的內存塊,這將工作良好。

  1. rel被指向無效的內存塊或NULL。
  2. 相對不與\0
  3. i終止未啓動以0

還有一答案,你可以不知道內存塊的指針從大小。指針不是內存塊。指針可以指定無效的內存塊,如果你想。因此,如果您想知道內存塊的長度,請將函數的參數length

+0

其實'rel'在它通過之前就是'malloc'。 '我'確實從零開始。 – 40Plot

+0

說如果'rel'不以\ 0結束。我該如何去尋找數組的長度。 – 40Plot

+0

@stackplasm看看我的答案的以下部分。你不能這樣做。 – mattn