整数を入力として受け取り、それらを印刷する配列に配置するためのコードを記述していました。C++スタックトレースを* .exe.stackdumpにダンプする
私は私の知る限り、私のポインタのすべてを掃除していますが、私は、実行時エラーを取得しておいてください。コードの
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]
に含まれる値には問題がありませんでしたので、その上の注意事項はすばらしいと思います。 ありがとう
ベストソリューションは開発環境によって異なりますので、OS、コンパイラ、IDEなどについて詳しく説明する必要があります。 – nodakai
サイドノート: 'return p;'の後の 'delete p;'は決して実行されません。とにかく新しく割り当てられていないものを削除するのはなぜですか?これは実際にあなたのクラッシュの根本原因と思われるあなたのメイン関数の 'delete q;'に当てはまります –
qが配列を指しているので、メインの呼び出しコードでqを削除すべきではありません – stan