您能否向我解释为什么在地球上此代码终止过程?
#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
s。它们被用作地址,但它们是无效的地址。seg故障。
&wsk[0]
和 &wsk[1]
,或更简单地, wsk
和 wsk+1
是一个有效的地址,其中 scanf
可以编写 int
。
,因为在第一种情况下,您没有将指针传递给SCANF函数。您正在WSK [0]和WSK [1]的 value 中,并将这些值视为指针。
a)两个代码至少在完成时终止。
b)您不会在程序结束之前删除所有预订。
c)您的程序是C和C 的混合。
...
D)SCANF将地址用于变量。&amp;