【问题标题】:Need help on C programming -> pointer在 C 编程方面需要帮助 -> 指针
【发布时间】:2018-07-26 02:57:07
【问题描述】:
  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;
    }
    

【问题讨论】:

  • pointer 不再保留它在返回new int[1000] 时收到的原始值。语句*pointer++ = j; 在每次迭代时将其向下递增。因此,delete [] pointer 调用未定义的行为。为枚举使用不同的指针。最后,停止垃圾邮件标签。这篇文章与 C# 和 C 完全无关。如果这是 C,那么第一个问题就不是 newdelete 不是语言可以理解的结构。
  • new [ ] 向您返回了一个值。发出delete [ ] 调用时必须使用相同的值。显然你没有这样做。

标签: c++


【解决方案1】:

在声明中

*pointer++ = j;

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

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

delete [] pointer;

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

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

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

【讨论】:

    猜你喜欢
    • 2021-10-13
    • 1970-01-01
    • 2011-10-04
    • 2011-03-17
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    相关资源
    最近更新 更多