首页 > 解决方案 > 在 C 编程方面需要帮助 -> 指针

问题描述

  1. 这里有什么错误?

    int main() {
        int* pointer = new int [1000];
    
        if (!pointer) return -1;
    
        for (int j = 0; j < 1000; j++)
            *pointer++ = j;
    
        If (pointer) {
            delete [] pointer;
            pointer = NULL;
                }
    
        return 0;
    }
    

标签: c++

解决方案


在声明中

*pointer++ = j;

pointer移动到分配的内存中的下一个位置。[后自增运算符将操作数的值增加,1但表达式的值是操作数在自增操作之前的原始值]

for循环之后,pointer指向内存超过分配的数组内存和这里

delete [] pointer;

您的程序正在尝试delete使用它不拥有的内存。

为了解决这个问题,在数组中插入元素时需要一个临时指针

int* temp = pointer;
for (int j = 0; j < 1000; j++)
    *temp++ = j;

推荐阅读