c++ - What's wrong with that code? (copying argv[] to array of ints) -
#include <cstdlib> #include <cstdio> main( int argc, char **argv ) { int *stack = new int[argc]; int = 0; while (--argc > 0 ) { *(++stack) = atoi(*++argv); printf( "%d \t %d \n", ++it, *stack ); } delete stack; return 0; }
stack[3]
should contain integer value argv[3]
,but doesn't.
what's more error connected delete operator munmap_chunk(): invalid pointer
this code isn't c; it's c++. there 2 options you:
- compile code c++, or ask/change question target c++ audience instead. expect them complain use of
printf
... - convert code c, easy enough. change
<cstdlib>
<stdlib.h>
,<cstdio>
<stdio.h>
,new int[argc]
malloc(argc * sizeof *stack);
,delete stack;
free(stack);
.
whichever route take, code invokes undefined behaviour; accesses stack
out of bounds one, , leaves first element of stack
uninitialised i'm sure isn't desired. meant print values after reading them , before incrementing stack
, since got wrong you're printing next element within array have of course not yet assigned...
then top off, loop modifies value of stack
(that's ++stack
does, after all), after loop when use delete
you're delete
ing reference wasn't created using new
... need make sure keep original value of stack
, gets delete
d, or free
d, or whatever...
#include <stdlib.h> #include <stdio.h> int main( int argc, char **argv ) { int *stack = malloc(argc * sizeof *stack); int = 0; while (--argc > 0){ stack[it] = atoi(*++argv); printf("%d \t %d \n", it, stack[it]); it++; } free(stack); return 0; }
Comments
Post a Comment