Run-Time Check Failure #3 - The variable 'zeichen_von_wort' is being used without being initialized.



  • Der folgende Prgrammcode soll ein Wörterbuch darstellen. Funktionsweise: es werden Wörter eingelesen und anschließen soll verglichen werden, ob das eingegebene Wort schon im Speicher vorhanden ist oder noch aufgenommen wird. Und wenn sonderzeichen wie z.B. . , ; etc eingegeben wird, soll das Programm beendet werden..

    Nun zur Fehlermeldung unter Visual Studio 2010 bekommen ich immer diese Fehler Meldung "Run-Time Check Failure #3 - The variable 'zeichen_von_wort' is being used without being initialized." in der Funktion int lies_wort(); aber egal wie ich die initialisiere es funktioniert nicht so richtig bei mir.. 😞

    #include "stdafx.h"
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #define getch() getc(stdin)
    #define ungetch(c) ungetc(c, stdin)
    
    #define MAXWORD 30
    #define MAXWOERTER 1000
    #define TRENNZEICHEN '1'
    
    int lies_wort();
    int suche_wort(char* adresse_von_wort);
    int neues_wort(char* adresse_von_wort);
    int trennzeichen(int zeichen);
    
    char* woerterbuch[MAXWOERTER];
    int wortnummer = 0;
    
    int main()
    {
    	int i;
    	int adresse_von_wort = 0;
    
    	printf("Unterschiedliche Woerter zaehlen\n");
    	printf("Eingabe beenden mit \"RETURN\"\n");
    
    	while ((adresse_von_wort = lies_wort()) != -1)
    	{
    		if (adresse_von_wort)
    		{
    			if (!suche_wort((char*)adresse_von_wort))
    				neues_wort((char*) adresse_von_wort);
    		}
    	}
    
    	/* wörterbuch ausgeben */
    	printf("\nAnzahl unterschiedlicher Woerter: %i\n", wortnummer);
    
    	for (i = 0; i < wortnummer; i++)
    		printf("Woerterbuch[%i]: %s \n", i, woerterbuch[i]);
    
    	getchar();
    
    	return (0);
    }
    
    int lies_wort()
    {
    	char* zeichen_von_wort;
    	char* wort = zeichen_von_wort;
    
    	int lim = MAXWORD;
    
    	int zeichen, t;
    	int adresse_von_wort;
    
    	if (trennzeichen(zeichen = *zeichen_von_wort++ = getch()) != TRENNZEICHEN)
    	{
    		if (zeichen == '\n')
    				return (-1);
    		*zeichen_von_wort = '\0';
    
    		return(0);
    	}
    
    	while (--lim > 0)
    	{
    		t = trennzeichen(zeichen = *zeichen_von_wort++ = getch());
    		if (t != TRENNZEICHEN)
    		{
    			ungetch(zeichen);
    			break;
    		}
    	}
    
    	*(zeichen_von_wort - 1) = '\0';
    	adresse_von_wort = (int) malloc(strlen(wort) + 1);
    	strcpy(((char *)adresse_von_wort), wort);
    
    	return(adresse_von_wort);
    }
    
    int suche_wort(char* adresse_von_wort)
    {
    	int i = 0;
    
    	for(i = 0; i < wortnummer; i++) 
    		if (!strcmp(adresse_von_wort, woerterbuch[i]))
    			return (1);
    
    	return (0);
    }
    
    int neues_wort(char* adresse_von_wort)
    {
    	woerterbuch[wortnummer++] = adresse_von_wort;
    	return (0);
    }
    
    int trennzeichen(int zeichen)
    {
    	switch (zeichen) {
    		case '.'	: ;
    		case ','	: ;
    		case ';'	: ;
    		case ' '	: ;
    		case '\n'	:	return (zeichen);
    								break;
    		default		:	return (TRENNZEICHEN);
    	}
    }
    


  • char* zeichen_von_wort;         // welchen Wert hat zeichen_von_wort hier?
    char* wort = zeichen_von_wort;  // welchen Wert bekommt demnach wort?
    ...
    if (trennzeichen(zeichen = *zeichen_von_wort++ = getch()) != TRENNZEICHEN)  // Wo kommt dann der Wert für zeichen her?
    
    int lies_wort()
    {
        int adresse_von_wort;
    ...
        adresse_von_wort = (int) malloc(strlen(wort) + 1);  // MÜLL
        strcpy(((char *)adresse_von_wort), wort);           // MÜLL
    
        return(adresse_von_wort);
    }
    

    Warum ist das kein

    char *lies_wort()
    

    Ein Pointer ist kein Integer

    Mehr habe ich nicht nachgesehen.


Anmelden zum Antworten