2017-09-30 3 views
-1

Ich bin neu in C und buchstäblich versucht, Zeiger von meiner Funktion auf die Zeigervariable zurückzugeben und diese "[Warnung] Zuweisung macht Zeiger von Integer ohne eine Besetzung" keine Ahnung, warum Compiler definiert es als ein int . Kann meine Funktion auch nicht vor main deklarieren, es wirft diesen "undefinierten Verweis auf` free_block '".Return Pointer von Funktion

#include <stdio.h> 
#include <stdlib.h> 
    struct block{ 
    int num; 
}; 

int main(int argc, char *argv[]) { 
    struct block *b; 
    b = free_block(); 

    struct block *free_block(){ 
     struct block *b = NULL; 
     return b; 
    } 
    return 0; 
} 

Danke

Ja, meine Schuld, ich weiß nicht, zu viel über c Syntax und hatte keine Ahnung über verschachtelte Funktionen, soz. Aber was könnte in diesem Fall falsch sein: Ich versuche, meinen eigenen Speicherzuordner ohne Verwendung von malloc oder Calloc-Funktionen zu erstellen. In meinem Code habe ich die gleiche Warnung in der Zeile mit pointer = free_space_get(size);, hier habe ich keine verschachtelten func(), meine Methoden vor main() definiert, habe aber immer noch keine Ahnung, ob ich meine Funktionen deklarieren muss oder nicht, coz in der Antwort gegeben mir es funktionierte gut, sobald Funktionen vor dem Haupt() definiert wurden. Zunächst alle Funktionen müssen deklariert werden, bevor sie aufgerufen werden:

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

struct header{ 
     size_t size; 
     struct header *next; 
     unsigned int free; 
    }; 
void *m_alloc(size_t size){ 
     size_t total_size; 
     void *block; 
     struct header *pointer; 
     if(!size) 
      return NULL; 
     pointer = free_space_get(size); 
     if(pointer){ 
      pointer->free = 0; 
      return (void*)(pointer + 1); 
     } 

    } 
struct header *get_free_space(size_t size){ 
     struct header *b = NULL; 
     return b; 
    } 

int main() { 
    return 0; 
} 
+3

Zwei Themen neu geschrieben werden. Zweitens hat C keine verschachtelten Funktionen. Ich empfehle Ihnen, [ein paar gute Anfängerbücher] (http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list) zu lesen. –

+2

Sie müssen die Funktion definieren oder deklarieren, bevor Sie sie aufrufen. – Barmar

+1

Sie sollten auch eine Warnung über eine implizite Deklaration der Funktion erhalten haben. Das sollte dir einen Hinweis geben, warum es als int definiert ist. – Barmar

Antwort

0

Ihr Code kann als

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

struct block{ 
    int num; 
}; 

struct block *free_block(){ 
     struct block *b = NULL; 
     return b; 
} 

int main(int argc, char *argv[]) { 

    struct block *b; 
    b = free_block(); 

    if(b == NULL) // Checking whether pointer is returned 
     printf("\n Recieved NULL \n"); 

    return 0; 
}