C 在scanf()读取后删除指针导致过程终止

C++ delete pointer after scanf() reading results in process termination

本文关键字:指针 过程 终止 删除 scanf 读取      更新时间:2023-10-16

您能否向我解释为什么在地球上此代码终止过程?

#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],或更简单地, wskwsk+1是一个有效的地址,其中 scanf可以编写 int

,因为在第一种情况下,您没有将指针传递给SCANF函数。您正在WSK [0]和WSK [1]的 value 中,并将这些值视为指针。

a)两个代码至少在完成时终止。
b)您不会在程序结束之前删除所有预订。
c)您的程序是C和C 的混合。
...
D)SCANF将地址用于变量。&amp;