Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.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_Pointers_Memory Management - Fatal编程技术网

C 使用下标访问长整型的指针

C 使用下标访问长整型的指针,c,pointers,memory-management,C,Pointers,Memory Management,我最近在一次编码竞赛中偶然发现了这段代码。我想不出这是怎么回事。第二行创建指向单个长整型的指针 我们如何在for循环中使用下标 即使这是可能的,它在第二次迭代时不会引起分段错误吗 intq=3; long long*queryArray=(long long*)malloc(sizeof(long long)); 对于(i_queryArray=0;i_queryArray

我最近在一次编码竞赛中偶然发现了这段代码。我想不出这是怎么回事。第二行创建指向单个长整型的指针

  • 我们如何在
    for
    循环中使用下标

  • 即使这是可能的,它在第二次迭代时不会引起分段错误吗

  • intq=3;
    long long*queryArray=(long long*)malloc(sizeof(long long));
    对于(i_queryArray=0;i_queryArray

    如何解释这段代码?

    这段代码确实是错误的。它越界并写入不存在的索引
    [1]
    [2]

    访问无效数组元素不一定会导致分段错误。这是一种未定义的行为,意味着任何事情都可能发生(包括崩溃、损坏不相关的数据,或者看似正常工作)


    如果你对一般的订阅感到困惑:
    a[b]
    只是指
    *(a+b)
    。第一次迭代很好,因为
    ptr[0]
    *(ptr+0)
    *ptr

    内存永远不会被访问代码访问超出范围。这是未定义的行为。任何事情都可能发生,包括它似乎起作用。这里出了什么问题?否决票!1.如果我们避免未定义的行为,我们就不能。2.可能吧。没有任何保证。
    int Q = 3;
    long long *queryArray = (long long*)malloc(sizeof(long long));
    
    for(i_queryArray = 0; i_queryArray < Q; i_queryArray++){
        scanf("%lld", &queryArray[i_queryArray]);
    }