C++ 将堆栈跟踪转储到 *.exe.stackdump
Posted
技术标签:
【中文标题】C++ 将堆栈跟踪转储到 *.exe.stackdump【英文标题】:C++ Dumping stack trace to *.exe.stackdump 【发布时间】:2016-03-30 10:06:55 【问题描述】:正在为赋值编写一些代码,以将整数作为输入并将它们放入要打印的数组中。
据我所知,我正在清理所有指针,但我不断收到运行时错误:
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;
所以只是寻找堆栈转储的解决方案...
此外,我确定我用来将cin
返回的string number
应用于array[10]
中包含的值的方法不是问题所要寻找的,因此对此的任何注释都会很棒。
谢谢
【问题讨论】:
最佳解决方案取决于您的开发环境,因此您需要详细说明您的操作系统、编译器、IDE 等。 旁注:delete p;
在return p;
之后永远不会执行。为什么要删除无论如何都没有分配新的东西?这实际上适用于您的主要功能中的delete q;
,我认为这是您崩溃的根本原因
不应在主调用代码中删除 q,因为 q 指向数组
【参考方案1】:
返回指向在函数内部分配的内存的指针不是一个好习惯,在这种情况下,您甚至没有在函数内部分配它,而是在全局空间中完成了它。 在编译期间激活所有警告是一个很好的做法,甚至在执行分配时将它们视为错误。 作为提示,您可以在 main 函数中分配内存,然后将指针传递给 readNumbers 函数。这样它就保持在同一范围内,并且更易于管理。 此外,与将数组长度传递给 printnumbers 函数的方式相同,您应该将其传递给 readnumbers one,而不是对其进行硬编码。
【讨论】:
【参考方案2】:您的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.
没关系。值得怀疑的是,数组的大小到处散布,如果你想改变它会发生什么?
【讨论】:
以上是关于C++ 将堆栈跟踪转储到 *.exe.stackdump的主要内容,如果未能解决你的问题,请参考以下文章