[C] Pointer: Access Violation

nickoff

Grünschnabel
Hallo Leute! Ich schreibe ein Testprogramm in C zu IP Forwarding. Als Compiler benutze ich MS Visual Studio 2008 Professional. Habe aber ein Problemm mit den Pointern. Hier ist ein kleiner Auszug aus dem Programm.
Code:
#include <stdio.h>
#include <stdlib.h>
#define TABLE_LENGTH 32772



//Definition Small Search Group
	struct ssg1 {
		unsigned int suffix, next_hop;
		unsigned char flag, length;
	};
//Definition Hash Table
	struct hash_table1 {
		unsigned int identifier, collision_pointer;
		unsigned char ssg_size;
		struct ssg1 *ssg_pointer;
	};
	

//Programmbegin
void main() {
	int i, j;
	unsigned char hash_length;
	unsigned int hash_result;
	struct ssg1 *ssg;
	struct hash_table1 hash_table[2*TABLE_LENGTH];

	hash_result=2;

				
				hash_table[hash_result].ssg_size=1;
				hash_table[hash_result].ssg_pointer=(struct ssg1 *) 
calloc(16,sizeof(struct ssg1 ));
				if (hash_table[hash_result].ssg_pointer=0) { 
printf("Not enough memory"); exit(1);}
				ssg=hash_table[hash_result].ssg_pointer;
				//Initialisierung SSG
				for (j=0; j<16; j++)
				{
					ssg->flag=0;
					ssg->length=0;
					ssg->next_hop=0;
					ssg->suffix=0;
					ssg++;
				}
			
printf("Done");
	getchar();

}

an der Stelle "ssg->flag=0" sagt mir der Debuger "Unhandled exception at 0x00843752 in test.exe: 0xC0000005: Access violation writing location 0x00000008." Weiss jemand einen Rat? Noch eine Frage wäre, ob ich direkt über hash_table[hash_result].ssg_pointer in z.B. Flag was reinschreiben kann? Bei hash_table[hash_result].ssg_pointer->flag=0 bekomme ich die selbe Fehlermeldung. Bin neu im Forum, wenn ich was falsch geschrieben habe, entschuldige ich mich im voraus.
 
Zuletzt bearbeitet:
Code:
#include <stdio.h>
#include <stdlib.h>
#define TABLE_LENGTH 32772



//Definition Small Search Group
    struct ssg1 {
        unsigned int suffix, next_hop;
        unsigned char flag, length;
    };
//Definition Hash Table
    struct hash_table1 {
        unsigned int identifier, collision_pointer;
        unsigned char ssg_size;
        struct ssg1 *ssg_pointer;
    };
    

//Programmbegin
void main() {
    int i, j;
    unsigned char hash_length;
    unsigned int hash_result;
    struct ssg1 *ssg;
    struct hash_table1 hash_table[2*TABLE_LENGTH];

    hash_result=2;

                
                hash_table[hash_result].ssg_size=1;
                hash_table[hash_result].ssg_pointer=(struct ssg1 *) 
calloc(16,sizeof(struct ssg1 ));
                if (hash_table[hash_result].ssg_pointer=0) { 
printf("Not enough memory"); exit(1);}
                ssg=hash_table[hash_result].ssg_pointer;
                //Initialisierung SSG
                for (j=0; j<16; j++)
                {
                    ssg->flag=0;
                    ssg->length=0;
                    ssg->next_hop=0;
                    ssg->suffix=0;
                    ssg++;
                }
            
printf("Done");
    getchar();

}

C:
if (hash_table[hash_result].ssg_pointer=0) { printf("Not enough memory"); exit(1);}
Du setzt den Zeiger auf 0 und prüfst ihn nicht.
Wenn in der Schleife nun auf den nullpointer zugregriffen wird, geht das natürlich nicht.
Ich denke mal du willst == anstatt = benutzen ;)

Best wishes
FBIagent
 
Zuletzt bearbeitet:
Zurück