这是我的第一个问题,我目前在学习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
为什么在你的代码中使用这么多的指针?这些都不是必需的,并且使你的代码变得脆弱并且容易出错。 –