为什么我的动态数组打印出垃圾值?

问题描述 投票:1回答:1

我有一个包含以下功能的头文件:

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

我不确定这里发生了什么?这是内存泄漏吗?

c++ list memory dynamic allocation
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.