これは私の最初の質問です。私は現在C++を学んでおり、Valgrindの使い方を研究しています。このプログラムは71のエラーで始まり、2まで最小限に抑えることができましたが、C++での経験がないため残りの問題を把握することはできません。誰かがここで何がうまくいかないのか、少なくとも私を良い方向に向けるのを助けることができますか?私はエラーが私に言っていることを理解する、私は問題を見ていないだけです。助けてくれてありがとう。ここで Valgrind:条件付きジャンプ、初期化されていない値、C++の基本コード
は、プログラムコードです:#include <iostream>
#include <cstdlib>
using namespace std;
int* initArray(int);
int fillArray(int *, int);
int* doubleArray(int *, int);
void displayArray(int *, int);
int main(int argc, char ** argv){
if (argc != 2){
cout << "wrong number of arguments" << endl;
exit(1);
}
int n = atoi(argv[1]);
srand(time(0));
int* ptr = new int[*initArray(n)]; //***Here is line 38***
fillArray(ptr, n);
displayArray(ptr, n);
int* dptr = doubleArray(ptr, n);
fillArray(ptr, 2*n);
displayArray(ptr, 2*n);
}
int* initArray(int n){
int arr[n];
int *ptr = arr;
return ptr;
}
int fillArray(int *ptr, int n){
for(int i=0; i<n; i++){
ptr[i] = rand() % 100;
}
}
int* doubleArray(int * ptr, int n){
int size = 2 * n;
int * tmp = new int[size];
ptr = tmp;
delete [] tmp;
return ptr;
delete [] ptr;
}
void displayArray(int *ptr, int n){
for(int i=0; i<n; i++){
cout << ptr[i] << " ";
}
cout << endl;
}
そして、ここにvalgrindのからの私のエラー出力です: http://i.imgur.com/881nsDw.png (それは、私がイメージとしてそれを投稿する10 repuationが必要と言うごめん!)
このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –
'initArray'は、' int arr [n] 'の直近のアドレスを返します。あなたのコードは*未定義の動作*を呼び出します。 – WhozCraig
なぜあなたのコード内で非常に多くのポインタを使用していますか?これらは必要ではなく、コードが壊れやすく、エラーを起こしやすくなります。 –