您能否向我解释为什么该代码会终止该过程?

#include<cstdio>

int main(){
    int *wsk = new int[2];

    scanf("%d %d", wsk[0], wsk[1]); // relevant line

    delete [] wsk;
    wsk = new int[10];
    return 0;
}


而这一点没有:

#include<cstdio>

int main(){
    int *wsk = new int[2];

    scanf("%d %d", &wsk[0], &wsk[1]); // relevant line, mark the two '&'

    delete [] wsk;
    wsk = new int[10];
    return 0;
}

最佳答案

scanf带指针。

它必须知道将读取值放在何处的地址。

wsk[0]wsk[1]是一些随机的(实际上是未定义的)int。它们用作地址,但它们是无效的地址。段故障。

&wsk[0]&wsk[1],或更简而言之,wskwsk+1是有效的地址,其中scanf可以写入int

关于c++ - 在scanf()读取结果导致进程终止后,C++删除指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22390550/

10-09 00:20