【问题标题】:C++ Dumping stack trace to *.exe.stackdumpC++ 将堆栈跟踪转储到 *.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 指向数组

标签: c++ arrays string pointers stack-trace


【解决方案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.
    

    没关系。值得怀疑的是,数组的大小到处散布,如果你想改变它会发生什么?

    【讨论】:

      猜你喜欢
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      • 2021-07-02
      • 2017-12-31
      • 2022-01-02
      • 1970-01-01
      相关资源
      最近更新 更多