Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352

    [c/c++] Rendere la malloc parametrica rispetto al tipo di ritorno

    Salve, c'è un modo che posso seguire per rendere la malloc parametrica rispetto al tipo di ritorno in c/c++? In pratica io vorrei poter fare qlcosa del tipo:

    int * = mymalloc(10 * sizeof(int));

    e fare in modo che la mymalloc restituisca direttamente un puntatore castato a puntatore a int, in modo che se compilo come c++ non mi da problemi.


    Con i template si potrebbe fare qlcosa? Non sono molto ottimista, visto che penso che non si e in grado di scegliere la giusta istanza solo in base al tipo di ritorno. Comunque se avete idee postatele!


  2. #2
    Utente di HTML.it L'avatar di Invio
    Registrato dal
    Sep 2003
    Messaggi
    60
    Prova a usare new che rispetto a Malloc calcola automaticamente
    la dimensione del tipo da allocare, pertanto non serve usare sizeof
    in più restituisce automaticamente il giusto tipo di puntatore
    eliminando il problema della conversione di tipo.

    int *p = new int[10];


  3. #3
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Si lo so che potrei usare altro, se è per questo potrei mettere appositamente il casting, il fatto e che devo compilare dei file con funzioni c come c++ senza modificarli direttamente, ma eventualemte riuscendo a ridefinire le funzioni che mi danno problemi.

  4. #4
    Definisci una funzione cosi:

    int *intMalloc(size_t size) {
    return (int *) malloc(size * sizeof(int));
    }

    In questo modo crei una funzione che inserendo il numero di int che vuoi ottenere restituisca automaticamente un puntatore ad intero con la dimensione calcolata. Se sostituisci a int qualsiasi altro parametro puoi ottenere delle malloc personalizzate per qualsiasi tipo di dato

    Se vuoi inoltre che i dati siano inizializzati a zero puoi sostituire malloc con calloc in questo modo:

    int *intCalloc(size_t size) {
    return (int *) calloc(size * sizeof(int));
    }


  5. #5
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Si, ma il problema è che i file sorgenti devono mantenere le originarie istruzioni malloc

    int *p = malloc (...)

    e ridefinire la malloc per mezzo di una macro in modo che venisse sotituita da una mia funzione che automaticamente mirestituisce il tipo giusto. Ma non si uo fare

  6. #6
    Si, devi usare le direttive al preprocessore:

    #define MyIntMalloc(variabile) (int *)malloc(variabile)

  7. #7
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Originariamente inviato da zaknafein
    Si, devi usare le direttive al preprocessore:

    #define MyIntMalloc(variabile) (int *)malloc(variabile)
    Ma nel file sorgente nessuno usa MyIntMalloc, nel file sorgente ci sono solo chiamate a malloc; l'obiettivo era proprio fare qlcosa come:

    #define malloc(a) myMalloc(..)

    dove myMalloc dovrebbe essere una funzione che restituisce il giusto tipo di ritorno in base al tipo della variabile che riceve il suo risultato; ma non si puo fare perche appunto non si puo determintare quale versione di myMalloc usare solo in base al tipo di ritorno.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.