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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我的动态数组打印出垃圾值?相关的知识,希望对你有一定的参考价值。

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

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

以上是关于为什么我的动态数组打印出垃圾值?的主要内容,如果未能解决你的问题,请参考以下文章

数组声明为 unsigned char 时的垃圾值

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

我想反转我的数组。为啥这段代码给出垃圾值?

为啥这个数组到二维数组布尔值是真的?

将 python 代码移植到 C++ /(在 C++ 中打印出数组)

内存位置作为放大动态数组中的最后一个值[重复]