c - 如果我的指针越过数组边界会怎样?

标签 c arrays pointers

我在下面创建了一个代码,我需要在其中跟踪一个数组,增加指向数组的指针,并在数组结束时停止。

我使用下面的代码进行了测试,显然在增加 ptr 和打印 *ptr 的 1000 次迭代之后,我得到了 0 作为值。

那么数组的最后一个元素总是 0 是真的吗?如果数组长度是动态创建的(并且不允许我改用链表),我如何告诉 ptr 在最后一个元素处停止?我担心如果我使用下面的代码,有一天我会遇到 printf i=1000 ,它会返回随机内存位置(到目前为止,对于下面的代码,这不是真的,但谁知道)。

#include <stdio.h>

int my_array[] = {1,23,17,4,-5,100};
int *ptr;

int main(void)
{
    int i;
    ptr = &my_array[0];     /* point our pointer to the first
                                      element of the array */
    printf("value of ptr is %d\n", *ptr);
    for(i=0; i<1000; i++){
        ptr++;
    }
    printf("value of ptr is now %d", *ptr);

    return 0;
}

最佳答案

So is this true the last element of array will ALWAYS be "0"?

不,这只是纯粹的运气。您正在从内存中的随机位置读取数据,您甚至可能会遇到段错误,从而终止您的程序。

您应该始终确保不要越过数组的边界进行读/写,否则可能会发生非常糟糕的事情(段错误可能是最不糟糕的错误)。

您可以使用以下方法跟踪数组中的项目数:sizeof(my_array)/sizeof(int)

关于c - 如果我的指针越过数组边界会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8313852/

相关文章:

c - 如何在字节变量中设置位(Arduino)

C# 将字节数组 append 到现有文件

java - 为什么将数组传递给另一个方法会更改原始数组?

c - 为什么矩阵不能用 5,3 而用 3,5?

python - 检查字符串为 1, 0 否则打印字符串

c - sigaction 捕获 SIGALRM

javascript - 为什么我的 JavaScript 数组显示两个元素计数,而实际上应该只有一个元素?

c++ - 指针类 C++

c - 指向指针数组的指针和 Stack Smashing 错误

c - kmalloc 许多结构,我应该一次全部分配还是分别分配