为分配编写了一些代码,将整数作为输入,并将它们放在要打印的数组中。
据我所知,我正在清理所有指针,但我不断收到运行时错误:
1 [main] new 3444 cygwin_exception::open_stackdumpfile: Dumping stack trace to new.exe.stackdump
代码正文:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int array[10];
int * p = array;
int *readNumbers()
{
int i=0;
for(i=0;i<10;i++)
{
string number;
int numb;
cout << "enter digit " << i << " of 10" << endl;
getline(cin, number);
istringstream (number) >> numb;
array[i]=numb;
}
return p;
delete p;
}
void printNumbers(int *numbers,int length)
{
int i;
for(i=0;i<length;i++)
{
cout << i << " " << *(numbers+i) << endl;
}
}
和主要调用代码:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
extern int *readNumbers();
extern void printNumbers(int *,int);
int main()
{
int * q = readNumbers();
printNumbers(q,10);
delete q;
return 0;
}
所以只是寻找堆栈转储的解决方案......
另外,我确定我用string number
返回cin
返回array[10]
所包含的值的方法不是问题的所在,所以任何关于此的注释都会很棒。
感谢
答案 0 :(得分:2)
返回指向函数内部分配的内存的指针并不是一个好习惯,在这种情况下,你甚至没有在函数内部分配它,你已经在全局空间中完成了。 最好在编译期间激活所有警告,甚至在执行任务时将其视为错误。 作为提示,您可以在main函数中分配内存,然后将指针传递给readNumbers函数。这样它就会保留在同一范围内,并且更易于管理。 另外,就像你将数组的长度传递给printnumbers函数一样,你应该将它传递给readnumbers而不是硬编码。
答案 1 :(得分:1)
您的delete
无效,您只能删除已使用new
分配的内容。
第一个是无害的,因为它在返回之后,所以从未执行过(顺便说一句,你应该看一下编译器警告)。
第二个可能会导致你的崩溃。
Also I'm sure the method I used to apply the string number returned by cin to the values contained in array[10] is not what the question was looking for so any notes on that would be great.
没关系。什么是可疑的是在各地扩大阵列的大小,如果你想改变它会发生什么?