массив char * продолжает устанавливаться в nullptr

Вот мой код:

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

Решение

Это ваша проблема:

+----+----+----+----+----+
|    |    |    |    |    |
+----+----+----+----+----+
^                         ^
|                         |
Start                     End
  • Start указатель возвращается из new [] выражение.
  • Второй цикл while (*buffer) итеративно перемещает указатель в позицию, обозначенную End,
  • End передается delete, Это не верно. Start хочет быть переданным delete,

Что вы можете сделать, это сохранить второй указатель на результат new [] выражение для использования с 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;
}
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]