arrays - 没有malloc的动态数组?

标签 arrays c pointers memory initialization

我正在阅读一些源代码,发现一个功能基本上允许您将数组用作链表?该代码的工作原理如下:

#include <stdio.h>

int
main (void)
{
    int *s;
    
    for (int i = 0; i < 10; i++)
    {
        s[i] = i;
    }
    
    for (int i = 0; i < 10; i++)
    {
        printf ("%d\n", s[i]);
    }
    
    return 0;
}
我明白 s在这种情况下指向数组的开头,但从未定义数组的大小。为什么这样做,它的局限性是什么?内存损坏等

最佳答案

Why does this work


它没有 ,它似乎工作(这实际上是运气不好)。

and what are the limitations of it? Memory corruption, etc.


Undefined behavior.
请记住:在您的程序中,无论您尝试使用什么内存位置,都必须对其进行定义。您要么必须使用编译时分配(例如,标量变量定义),要么对于指针类型,您需要使它们指向某个有效内存(先前定义的变量的地址),或者在以下位置分配内存运行时(使用分配器函数)。使用任何不确定的任意内存位置都是无效的,并且会导致 UB。

关于arrays - 没有malloc的动态数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65357233/

相关文章:

c - 带公式的结构

c++ - 将多维数组的一部分归零

c - 不理解标准输出语义

c - C 查找某个字符在字符串中出现的次数

c - 如何增加指针地址和指针的值?

c++ - 从函数返回一个堆分配的指针好吗?

c - 为什么 c 数组声明为变量名而不是类型

java - 从对象转换为字节数组并在 Java 中返回

Javascript:在每个第n个成员之后插入数组的新成员

Javascript : Unexpected empty element in array with different key types?