【发布时间】:2017-02-28 20:16:27
【问题描述】:
我有以下功能:
void printKMax(int arr[], int n, int k){
int* start = &arr[0];
int* run = new int();
if(n > 1){
int* run = &arr[1];
cout << "Initial run pointer " << *run << endl;
}else {
cout << *start << endl;
return;
}
for(int i = 0; i < k-1; i++){
cout << "Run in for loop " << *run << endl;
}
delete run;
}
输入arr = {3 4 6 3 4} 和k = 4。
第一个 cout 打印 4,而 for 循环 cout 打印 0 三次。为什么它给0而不是4?为什么在 for 循环中取消引用指针与在 if 语句中不同?
【问题讨论】:
-
你似乎对C++有不少误解。你应该退后一步,从一本好书中系统地学习语言。
-
您有两个名为
run的变量,其中一个会影响另一个。 -
您永远不会修改 顶级
run变量。它永远不会改变它指向的内容,这是一个零初始化的int。 -
而且你永远不会在循环内修改
run。所以你将循环k-1次打印完全相同的值。一遍又一遍。这就是你需要学习如何使用调试器的原因,这样你就可以自己发现这些愚蠢的问题。能够使用调试器是所有程序员的一项关键技能。 -
修改外部
run指向数组将调用带有delete run的UB。我认为@BaummitAugen 在这里有最相关的评论,这个问题不应该得到回答。