Этот код не является C; это C++. Существует два варианта:
- Скомпилируйте код как C++ или задайте/измените свой вопрос, чтобы вместо этого настроить таргетинг на аудиторию C++. Ожидайте, что они будут жаловаться на ваше использование
printf
...
- Преобразуйте код в C, что достаточно просто. Изменить
<cstdlib>
на <stdlib.h>
, <cstdio>
, <stdio.h>
, new int[argc]
до malloc(argc * sizeof *stack);
и delete stack;
до free(stack);
.
Какой бы маршрут вы ни выбрали, этот код вызывает неопределенное поведение; он обращается к stack
за пределы для одного и оставляет первый элемент stack
uninitialised, который, я уверен, не будет желательным. Вероятно, вы должны были напечатать значения после их чтения и до приращения stack
, но так как вы ошибаетесь, вы печатаете следующий элемент в своем массиве, который вы, конечно, еще не назначили ...
Затем верните его все выключено, ваш цикл изменяет значение stack
(это все-таки ++stack
), так что после вашего цикла, когда вы используете delete
, вы являетесь delete
ссылкой, которая не была создана с использованием new
... Вам нужно сделать что вы сохраните первоначальное значение stack
, который получает delete
д или free
д, или что-то ...
#include <stdlib.h>
#include <stdio.h>
int
main(int argc, char **argv) {
int *stack = malloc(argc * sizeof *stack);
int it = 0;
while (--argc > 0){
stack[it] = atoi(*++argv);
printf("%d \t %d \n", it, stack[it]);
it++;
}
free(stack);
return 0;
}
'delete' не вещь в C. – juanchopanza
' ++ stack' неверна. – BLUEPIXY
Почему бы вам не упростить чтение кода с помощью простого, традиционного для цикла (например, 'for (int i = 0; i