您能否向我解释为什么该代码会终止该过程?
#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]
,或更简而言之,wsk
和wsk+1
是有效的地址,其中scanf
可以写入int
。
关于c++ - 在scanf()读取结果导致进程终止后,C++删除指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22390550/