【发布时间】:2015-05-31 13:59:05
【问题描述】:
#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 连接时遇到错误
【问题讨论】:
-
delete在 C 中不是一个东西。 -
为什么不使用简单的传统 for 循环(例如
for (int i = 0; i < argc; i++) { ... })来让代码更易于阅读,而不是在每个循环中内联处理 三个 变量迭代? -
您调用
delete的指针与new返回的指针不同。因此,您的程序表现出未定义的行为。此外,以new的数组形式分配的内存应以delete的数组形式释放,如delete[] pointerAllocatedByNew; -
你也永远不会分配
stack[0]。但是如果argc > 3那么stack[3]将包含atoi(argv[3])。如果您仍然遇到问题,请发布显示问题的命令行