hallöchen, hab n Problem mit meiner Warteschlange. 8(
Hab das ganze Wochenende gebastelt und hab erstmal folgendes Grundgerüst erstellt.
Man sieht das die zahlen 1-9 in die Schlange geschrieben werden und dann wieder aus der Schlange gelesen werden. So weit so gut 8)
So, das klappt mit den Int Zahlen schon ganz fein ABER nu:
- Problem: wenn ich ein komplettes Array bestehend aus strings in die Warteschlange schreiben möchte kommt es zu einem Überlauf, schon bei der zuweisung in die Schlange *vermute ich*
Ich komme da nicht weiter. Woran liegt es dass er kein ganzes array in die Schlange schieben kann?
Hab das ganze Wochenende gebastelt und hab erstmal folgendes Grundgerüst erstellt.
C++:
# include <stdio.h>
# include <stdlib.h>
# define WAIT for(;;)
#include <iostream>
#include <string>
using namespace std;
struct queue
{
int *array;
int size;
int last;
};
extern struct queue *que_construct();
extern void que_destruct( struct queue *que);
extern int que_put( struct queue *que, int val);
extern int que_get( struct queue *que, int *val);
void main()
{
struct queue *que;
int i;
que = que_construct();
printf( "\nPush:");
for(i = 0; i < 10; i++)
{
printf( " %d", i);
que_put(que, i);
}
printf( "\nGet:");
while( que_get( que, &i))
printf( " %d", i);
printf( "\n");
que_destruct( que);
WAIT;
}
extern struct queue *que_construct()
{
struct queue *que;
que = (struct queue *)malloc( sizeof( struct queue));
if( !que)
return 0;
que->array = (int *)malloc(100*sizeof(int));
if( !que->array)
return 0;
que->size = 100;
que->last = 0;
return que;
};
extern int que_put( struct queue *que, int val)
{
if(que->last == que->size)
{
que->array = (int *)realloc(que->array, (que->size+50)*sizeof(int));
que->size += 50;
}
que->array[que->last] = val;
que->last++;
return 1;
}
extern int que_get( struct queue *que, int *val)
{
int i;
if(que->last == 0)
return 0;
*val = que->array[0];
que->last--;
for(i = 0; i < que->last; i++)
que->array[i] = que->array[i+1];
return 1;
}
extern void que_destruct( struct queue *que)
{
free( que->array);
free( que);
}
Man sieht das die zahlen 1-9 in die Schlange geschrieben werden und dann wieder aus der Schlange gelesen werden. So weit so gut 8)
So, das klappt mit den Int Zahlen schon ganz fein ABER nu:
- Problem: wenn ich ein komplettes Array bestehend aus strings in die Warteschlange schreiben möchte kommt es zu einem Überlauf, schon bei der zuweisung in die Schlange *vermute ich*
C++:
// abänderungen
# include <stdio.h>
# include <stdlib.h>
# define WAIT for(;;)
#include <iostream>
#include <string>
using namespace std;
struct queue
{
string *array;
int size;
int last;
};
extern struct queue *que_construct();
extern void que_destruct( struct queue *que);
extern int que_put( struct queue *que, int val);
extern int que_get( struct queue *que, int *val);
void main()
{
struct queue *que;
int i;
que = que_construct();
string chars[10] = {"test1","test2","test3"};
for( i = 0 ; i < 3, i++)
que_put(que, chars[i]);
for( i = 0; i < 3, i++)
cout << que_get( que, &i));
que_destruct( que);
WAIT;
}
extern struct queue *que_construct()
{
struct queue *que;
que = (struct queue *)malloc( sizeof( struct queue));
if( !que)
return 0;
que->array = (int *)malloc(100*sizeof(string));
if( !que->array)
return 0;
que->size = 100;
que->last = 0;
return que;
};
extern int que_put( struct queue *que, string val)
{
if(que->last == que->size)
{
que->array = (int *)realloc(que->array, (que->size+50)*sizeof(string));
que->size += 50;
}
que->array[que->last] = val;
que->last++;
return 1;
}
extern int que_get( struct queue *que, string *val)
{
int i;
if(que->last == 0)
return 0;
*val = que->array[0];
que->last--;
for(i = 0; i < que->last; i++)
que->array[i] = que->array[i+1];
return 1;
}
extern void que_destruct( struct queue *que)
{
free( que->array);
free( que);
}
Ich komme da nicht weiter. Woran liegt es dass er kein ganzes array in die Schlange schieben kann?