在C中创建动态数组,但未指定最大大小

问题描述 投票:1回答:1

我现在正在重新研究C,并且一直有人告诉我,在C中,我们必须定义将具有数组的最大大小,以便可以在内存中保留足够的空间。我的意思是:

#include <stdlib.h> //Para función malloc

int main() {

   int *enteros = malloc( sizeof(int) * 10 ); //An array of 10 integers
   int i;
   for(i = 0; i < 100; i++) {
      enteros[i] = i*10;
      printf( "-> enteros[%d] = %d\n", i, i*10 );
   }
}

但是,以下代码运行良好(这里我没有告诉最大大小,我只是为int指针分配了足够的内存,而我只是无法找到此处发生问题的答案。

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *enteros = malloc( sizeof(int) );
    int i;
    for(i = 0; i < 2000; i++) {
       *(enteros++) = i*10;
       printf( "-> enteros[%d] = %d\n", i, i*10 );
       enteros++;
   }
}

似乎我可以很好地管理动态数组,而不必为数组重新分配内存并被迫引入起始大小,但是我觉得我缺少了一些东西。

c arrays dynamic-memory-allocation dynamic-arrays
1个回答
0
投票

尝试此代码:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *enteros = malloc( sizeof(int) );
    int *a = malloc( sizeof(int));
    int i;
    *a = 4;
    for(i = 0; i < 2000; i++) {
       *(enteros++) = i*10;
       printf( "-> enteros[%d] = %d\n", i, i*10 );
       enteros++;
   }
   printf( "a = %d\n", *a);
}

https://repl.it/repls/SoggyOverdueFactors

© www.soinside.com 2019 - 2024. All rights reserved.