Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Caetano Vieira

Problemas com Array

Recommended Posts

OLA PESSOAL,

ESTOU CURSANDO SISTEMAS DE INFORMAÇÃO,E ESTOU COM UMA DÚVIDA SOBRE A CAPACIDADE DO TAMANHO DO ARRAY,SE ERA POSSÍVEL O USUÁRIO PODER ESCOLHER O TAMANHO DESEJADO DO ARRAY.CRIEI ESSE ALG PARA VOCÊS ANALISAREM E CASO SEJA POSSÍVEL DE UTILIZAR.

 

#include <stdio.h>
#include <stdlib.h>
int main() {
    int i,array[i];
   
    printf("DIGITE O TAMANHO DO ARRAY: ");
    scanf("%d",&i);
    
    
    return 0;
}
GRATO A TODOS.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É possível, basta redimensionar o array, você pode criar ele com um tamanho coringa e depois redimensione:

 

http://stackoverflow.com/questions/2937409/resizing-an-array-with-c

http://stackoverflow.com/questions/3749660/how-to-resize-array-in-c

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não vou opinar sobre C++.

 

Os exemplos todos do link do stackoverflow (referentes a C/realloc) são ruins, pois podem ocasionar vazamento de memória. Da documentação:

 

 

 

(...)The realloc() function returns a pointer to the newly allocated memory, which is suitably aligned for any kind of variable and may be different from ptr, or NULL if the request fails. (...) If realloc() fails the original block is left untouched; it is not freed or moved.

 

 

Portanto:

 

 

T *p = malloc(sizeof *p);
 
// ...
 
p = realloc(p, 2 * sizeof *p); // valor anterior de p é destruído - se NULL for retornado, perdemos o endereço do objeto anterior, que nunca será desalocado.
 

 

 

Se o storage duration desejado for realmente allocated, deve ser feito o seguinte:

 

 

{
    void *check = realloc(p, n);
 
    if (!check)
    {
        // tratar erro.
    }
    else
    {
        p = check;
    }
}

 

 

Se o storage duration puder ser auto[/b], sugiro usar VLAs:

 

 

size_t n = read_size();
 
if (!n)
{
    // tratar erro de leitura do tamanho
}
 
int array[n];
 
// prosseguir manipulando array, de tamanho n

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.