-4

これが私のコードです:

int main () 

{
    const int MAX = 10;
    char *buffer = nullptr;       // used to get input to initialize numEntries
    int ARRAY_SIZE = 20;            // default is 20 entries

    int numEntries;
    success = false;

    while (!success)
    {
        delete buffer;
        buffer = nullptr;
        buffer =  new char [MAX];

        cout << "How many data entries:\t";
        cin.getline(buffer, MAX, '\n');

        cout << endl << endl;

        while (*buffer)
        {
            if (isdigit(*buffer++))
                success = true;
            else
        {       
               success = false;
                break;
        }
    }
}

numEntries = atoi(buffer);

問題は、任意の数値を入力すると「numEntries = 0」と表示され、文字列を入力するとクラッシュすることです。

誰かが正確に何が起こっているのか説明できますか?

4

1 に答える 1

0

これはあなたの問題です:

+----+----+----+----+----+
|    |    |    |    |    |
+----+----+----+----+----+
  ^                         ^
  |                         |
 Start                     End
  • Start式から返されるポインタnew []です。
  • 2 番目の while ループwhile (*buffer)は、ポインタを で示される位置に繰り返し移動しますEnd
  • Endに渡されdeleteます。これは間違っています。 Startに渡されることを望んでいますdelete

あなたがしたいことは、new []使用される式の結果への2番目のポインタを格納することですdelete(これも である必要がありますdelete [])例:

int main () 
{
    const int MAX = 10;
    char *buffer = nullptr;       // used to get input to initialize numEntries
    char *bufferptr = nullptr;    // <- ADDED
    int ARRAY_SIZE = 20;            // default is 20 entries

    int index = 0;
    success = false;

    while (!success)
    {
        delete [] bufferptr; // <- CHANGED
        buffer = nullptr;
        buffer =  new char [MAX];
        bufferptr = buffer; // <- ADDED

        cout << "How many data entries:\t";
        cin.getline(buffer, MAX, '\n');

        cout << endl << endl;

        while (*buffer)
        {
            if (isdigit(*buffer++))
                success = true;
            else
                success = false;
        }
    }
}
于 2013-06-11T06:57:01.437 に答える