#include <cstdlib>
#include <cstdio>
main( int argc, char **argv )
{
int *stack = new int[argc];
int it = 0;
while (--argc > 0 )
{
*(++stack) = atoi(*++argv);
printf( "%d \t %d \n", ++it, *stack );
}
delete stack;
return 0;
}
stack[3]
должен содержать целочисленное значение из argv[3]
, но это не так.
Более того, я получаю сообщение об ошибке, связанное с оператором удаления munmap_chunk(): invalid pointer
Этот код не C; это C ++. Для вас есть два варианта:
printf
…<cstdlib>
в <stdlib.h>
, <cstdio>
в <stdio.h>
, new int[argc]
в malloc(argc * sizeof *stack);
а также delete stack;
в free(stack);
,Какой бы путь вы ни выбрали, этот код вызывает неопределенное поведение; это доступ stack
за пределы одного и оставляет первый элемент stack
неинициализированный, который, я уверен, не желателен. Вы, вероятно, хотели напечатать значения после их чтения и перед увеличением 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;
}
Ваш код был бы более понятным (и правильным), если бы вы использовали индексирование массивов вместо продвигающихся указателей:
#include <cstdlib>
#include <cstdio>
using namespace std;
main( int argc, char **argv )
{
int *stack = new int[argc];
for( int it = 1; it < argc; ++it )
{
stack[it] = atoi(argv[it]);
printf( "%d \t %d \n", it, stack[it] );
}
delete[] stack;
return 0;
}
Понятия не имею, почему вы хотите, чтобы неиспользованные stack[0]
, хоть.