這是我的第一個問題,我目前在學習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
爲什麼在你的代碼中使用這麼多的指針?這些都不是必需的,並且使你的代碼變得脆弱並且容易出錯。 –