Witam, ciągle sobie ulepszam swój program i mam problem z alokacją pamięci. Przy alokacji tablicy wyskakuje seria błędów, a dla struktur wgl nie wiem jak to zrobić.
//============================================================================
// Name : Przyjaciele.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <sstream>
#include <conio.h>
#include<stdio.h>
using namespace std;
int main(int argc, char *argv[]) {
int dlugosc;
FILE* plik;
char *n;
char* xx;
int rozmiar;
dlugosc=0;
xx = (char*) malloc(100*sizeof(char));
plik = fopen (argv[1],"r");
/////////////ilosc lini///////////
while (feof(plik) == false) {
fgets( xx, 100, plik );
dlugosc=dlugosc+1;
}
/////////////
fclose(plik);
cout << "Rozmiar:"
<< dlugosc;
struct dane {
char* imie;
int wiek;
char* przyjaciele[99];
int ile_przyjaciol;
char* wrogowie[99];
int ile_wrogow;
string lancuch[99];
};
struct dane osoby[1000];
int w, j, x, i,z,m;
string lancuch;
char* po;
char*po2;
char* tab= malloc(dlugosc*sizeof(char)); // TU JEST BLAD
char* imie_max;
int bonus, max, suma, l_osoby;
float srednia, licznik;
char* tekst;
tekst = (char*) malloc(100*sizeof(char));
z = 0;
l_osoby = 0;
j = 0;
plik = fopen(argv[1], "r");
while (feof(plik) == false) {
i = 0;
n = fgets(tekst, 100, plik);
///printf("%s\n",tekst);
char* k = tekst;
while (k != NULL) {
char* l = strchr(k + 1, ' ');
if (l != NULL)
*l = '\0';
////cout << k << endl;
bonus = strlen(k);
if (k[bonus - 1] == '\n')
k[bonus - 1] = '\0';
tab[i] = k;
i = i + 1;
if (l != NULL)
k = l + 1;
else
k = NULL;
}
////////////osoby////////////////
if (strlen(tab[0]) == 5) {
l_osoby = l_osoby + 1;
osoby[j].imie = strdup(tab[1]);
osoby[j].wiek = atof(tab[2]);
/// printf("%d\n",j);
/// printf("imie %s\n",osoby[j].imie);
////printf("wiek %d\n",osoby[j].wiek);
////printf("\n");
}
///////////////////////////////////
if (l_osoby==0){
printf("ILOSC: 0");
return EXIT_SUCCESS;
}
/////////////////przyjaciele/////////////////////
if (strlen(tab[0]) == 11) {
z = z + 1;
///printf("%s\n",tab[0]);
for (i = 0; i <= j - z; i++) {
w = 0;
//////////PRZYJACIELE////////////////////
if (osoby[i].imie == string(tab[1])) {
while (osoby[i].przyjaciele[w] != NULL) {
w = w + 1;
}
osoby[i].przyjaciele[w] = strdup(tab[2]);
osoby[i].ile_przyjaciol = w + 1;
}
if (osoby[i].imie == string(tab[2])) {
while (osoby[i].przyjaciele[w] != NULL) {
w = w + 1;
}
osoby[i].przyjaciele[w] = strdup(tab[1]);
osoby[i].ile_przyjaciol = w + 1;
}
}
}
/////////////////////////WROGOWIE/////////////////////
if (strlen(tab[0]) == 8) {
z = z + 1;
///printf("%s\n",tab[0]);
for (i = 0; i <= j - z; i++) {
w = 0;
if (osoby[i].imie == string(tab[1])) {
while (osoby[i].wrogowie[w] != NULL) {
w = w + 1;
}
osoby[i].wrogowie[w] = strdup(tab[2]);
osoby[i].ile_wrogow = w + 1;
}
if (osoby[i].imie == string(tab[2])) {
while (osoby[i].wrogowie[w] != NULL) {
w = w + 1;
}
osoby[i].wrogowie[w] = strdup(tab[1]);
osoby[i].ile_wrogow = w + 1;
}
}
}
///////////////////////////////////////////
j = j + 1;
}
////////////////lancuch///////////////////////
////printf("odpalanie lancucha\n");
for (i=0;i<=j-z;i++){
for (w=0;w<=osoby[i].ile_przyjaciol-1;w++){
for (x=0;x<=j-z;x++){
for(m=0;m<=osoby[i].ile_wrogow-1;m++){
if (string(osoby[i].przyjaciele[w])==string(osoby[i].wrogowie[m])){
return EXIT_FAILURE;
}
}
}
}
}
////zadania programu///////////////
////najwiecej przyjaciol///////////
max = 0;
for (i = 0; i <= j - 1; i++) {
if (osoby[i].ile_przyjaciol >= max) {
max = osoby[i].ile_przyjaciol;
imie_max = osoby[i].imie;
}
}
if (max == 0) {
printf("NAJWIECEJ_PRZYJACIOL: brak\n");
} else {
printf("NAJWIECEJ_PRZYJACIOL: %s\n", imie_max);
}
/////////////////////////
////najwiecej wrogow///////////
max = 0;
for (i = 0; i <= j - 1; i++) {
if (osoby[i].ile_wrogow >= max) {
max = osoby[i].ile_wrogow;
imie_max = osoby[i].imie;
}
}
if (max == 0) {
printf("NAJWIECEJ_WROGOW: brak\n");
} else {
printf("NAJWIECEJ_WROGOW: %s\n", imie_max);
}
/////////////////////////
//////sredni wiek bez przyjaciol////////////
licznik = 0;
suma = 0;
srednia = 0;
for (i = 0; i <= j - 1; i++) {
if ((osoby[i].ile_przyjaciol == 0) && (osoby[i].imie != NULL)) {
suma = suma + osoby[i].wiek;
licznik = licznik + 1;
}
}
srednia = suma / licznik;
printf("SREDNI_WIEK_BEZ_PRZYJACIOL: %.1lf\n", srednia);
printf("ILOSC: %d\n", l_osoby);
for(i=0;i<=10;i++){
for (j=0;j<=10;j++){
//// cout<<"lancuch: "<<osoby[i].lancuch[j]<<endl;
//printf ("zmienna dodatkowa: %d i %s oraz %s\n",m,po,po2);
}
}
return EXIT_SUCCESS;
}
Oto mój kod, zaznaczyłem gdzie jest błąd,a zmienna długość oznacza ilość wierszy w pliku. Z góry dziękuję i pozdrawiam.