Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 需要C编程->指针方面的帮助吗_C++ - Fatal编程技术网

C++ 需要C编程->指针方面的帮助吗

C++ 需要C编程->指针方面的帮助吗,c++,C++,这里的错误是什么 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;

这里的错误是什么

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++ = j;
指针移动到分配内存中的下一个位置。[增量后运算符将操作数的值增加1,但表达式的值是增量运算之前操作数的原始值]

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

delete [] pointer;
您的程序正在尝试删除它不拥有的内存

若要解决此问题,请在数组中插入元素时使用临时指针

int* temp = pointer;
for (int j = 0; j < 1000; j++)
    *temp++ = j;
指针不再保存返回新int[1000]时收到的原始值。语句*pointer++=j;在每次迭代中按顺序递增。因此,delete[]指针调用未定义的行为。对枚举使用不同的指针。最后,停止滥发标签。这篇文章绝对与C无关,也与C无关。如果这是C,那么第一个问题就是new或delete都不是语言理解的结构。new[]返回了一个值给您。发出delete[]调用时必须使用相同的值。显然你没有那样做。