0

Valgrind から次のエラーが表示されます。

  • ==31251== Memcheck、メモリエラー検出器
  • ==31251== Copyright (C) 2002-2010、および Julian Seward らによる GNU GPL です。
  • ==31251== Valgrind-3.6.0 と LibVEX を使用。著作権情報については -h で再実行してください
  • ==31251== コマンド: ./a.out
  • ==31251== 親 PID: 31250
  • ==31251==
  • ==31251== 条件付きジャンプまたは移動は、初期化されていない値に依存します
  • ==31251== 0x400B9F: strcat2(char*, char*) (main.clean.cpp:30)
  • ==31251== by 0x400C4E: メイン (main.clean.cpp:50)
  • ==31251==
  • ==31251==
  • ==31251== ヒープ概要:
  • ==31251== 出口で使用中: 0 ブロックで 0 バイト
  • ==31251== 合計ヒープ使用量: 2 つの割り当て、2 つの解放、3,010 バイトの割り当て
  • ==31251==
  • ==31251== すべてのヒープ ブロックが解放されました -- リークの可能性はありません
  • ==31251==
  • ==31251== 検出され抑制されたエラーの数については、-v で再実行してください。
  • ==31251== --track-origins=yes を使用して、初期化されていない値がどこから来ているかを確認します
  • ==31251== エラーの概要: 1 つのコンテキストから 3 つのエラー (抑制: 6 から 6)

コードの何が問題なのかわかりません...

#include <iostream>
using namespace std;

void strcat2(char* a, char* b);

int main()
{
    char *a = new char[2010], *b = new char[1000];
    while (cin.getline(a, 1000) && cin.getline(b, 1000))
    {
        cout << "a = \"" << a << "\";" << endl;
        cout << "strcat2(a, \"" << b << "\");" << endl;
        strcat2(a, b);
        cout << "a = \"" << a << "\";" << endl << endl;
    }
    delete[] a;
    a = NULL;
    delete[] b;
    b = NULL;


    return 0;
}

void strcat2(char* a, char* b){
    while (*a){ 
        a++; 
    }
    while((*a++ = *b++) != '\0'){ 
        *a++ = *b++;
    }


}
4

1 に答える 1

1

@Adri CSが言っているように:

while((*a++ = *b++) != '\0') { 
    *a++ = *b++;
}

成功する:

while((*a++ = *b++) != '\0');

注:答えは@Adri CSによって与えられます

于 2013-11-06T16:12:17.920 に答える