2016-08-08 13 views
-3

私は自分のコードに新しい関数を追加しました。そして、私が使った整数は何らかのメモリオーバーランの影響を受けます。 (私は機能printTextを削除した場合、オーバーランが発生しません)、それは256 によってデクリメント1 xPos--;とによって代わりにデクリメントの整数へのメモリリークC++

を(これはArduinoの宇野ため.inoスケッチに関するされることに注意してください)。

整数XPOSとチャーバッファが含ま直下

int xPos = 0; 
char buffer[26]; 

で定義されています。 u8g.drawStr関数は文字列を私のディスプレイに描画し、xとyの2つのintと引数としてのchar *をとります。

任意協議会は非常に高く評価されるだろう
void printText(const char* inputText) 
{ 
    int y = yPos; 
    for (int i = strlen(inputText); i > 0; i -= 25) 
    { 
     strncpy(buffer, &inputText[strlen(inputText) - i], i >= 25 ? 25 : i); 
     buffer[26] = '\0'; 
     u8g.drawStr(0, y, buffer); 
     y += 8; 
    } 
} 

:)

+6

'buffer [26] = '\ 0';はバッファオーバーフローです。サイズ26は、有効なインデックスが0から25までであることを意味します。 –

+2

また、ヌルターミネータにヒットしたときに入力の読み込みを停止するので、 'strncpy'の引数として' 25'を使用することができます –

+0

ありがとう!それはそれを解決しました、私は目が見えませんでした。 – werkamsus

答えて

4

あなたのバッファは26のスロットがあります。あなたはその27スロットに書き込みをしてみてくださいそれでも

char buffer[26]; 

を:

buffer[26] = '\0'; 

それはうまくいかないでしょう。したがって、26は27番目のスロットです。

+0

ありがとう!それはそれを修正:) – werkamsus