我有一个包含以下功能的头文件:
int* createList(int n) {
if (n >= 1) {
int* list = new int[n];
for (int i = 0; i < n; i++)
list[n] = 0;
return list;
}
return nullptr;
}
在我的主文件中,我具有以下主要功能:
int main() {
int* list = createList(9);
for (int i = 0; i < 9; i++) {
cout << list[i] << endl;
}
delete[] list;
return 0;
}
我的程序应该为动态数组的每个值输出全0,但是,最终我得到了垃圾值。这是示例输出:
0
1610612736
0
1610612736
-1727266800
32767
1631355286
32767
-1727229592
我不确定这里发生了什么?这是内存泄漏吗?
createList()
中的以下代码段:
for (int i = 0; i < n; i++)
list[n] = 0;
在循环的每次迭代中设置list[n]
,这总是在数组边界之外。
替换为:
for (int i = 0; i < n; i++)
list[i] = 0;
即,用i
代替n
。