Ciao ragazzi,sono sempre io .Ho un problema con l'istruzione free,in particolare è come se non riuscisse a restituirmi lo spazio allocato.
Ma veniamo al codice:
codice:
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
int ContaParole(char* supporto);
int* CreaCifra(char* supporto,int numeroparole);
int main()
{
ifstream numeri;
char supporto[256];
int nparole;
numeri.open("Somma.txt",ios::in|ios::out|ios::app);
while(numeri.good())
{
numeri.getline(supporto,256);
nparole = ContaParole(supporto);
int* vet = (int*) calloc (nparole+1,sizeof(int));
vet = CreaCifra(supporto,nparole);
cout << vet[0];
free(vet);
}
return 0;
}
int* CreaCifra(char* supporto,int numeroparole)
{
int i,k=0,posizione = 0,indicecifra;
int* cifre = (int*) calloc(numeroparole,sizeof(int));
char* cifra = (char*) calloc(8,sizeof(char));
do
{
indicecifra = 0;
for (i=k;((supporto[i]!=' ')&&(supporto[i]!='\0'));i++)
{
cifra[indicecifra++] = supporto[i];
k++;
}
cifra[i]='\0';
if (!strcmp("uno",cifra))
cifre[posizione++] = 1;
if (!strcmp("due",cifra))
cifre[posizione++] = 2;
if (!strcmp("tre",cifra))
cifre[posizione++] = 3;
if (!strcmp("quattro",cifra))
cifre[posizione++] = 4;
if (!strcmp("cinque",cifra))
cifre[posizione++] = 5;
if (!strcmp("sei",cifra))
cifre[posizione++] = 6;
if (!strcmp("sette",cifra))
cifre[posizione++] = 7;
if (!strcmp("otto",cifra))
cifre[posizione++] = 8;
if (!strcmp("nove",cifra))
cifre[posizione++] = 9;
if (!strcmp("zero",cifra))
cifre[posizione++] = 0;
k++;
for (int j=0;j<indicecifra;j++)
cifra[j]=0;
}
while(k<strlen(supporto));
// free(cifra);
return cifre;
}
int ContaParole(char* supporto)
{
int i,j,k=0,nparole=0;
for (i=0;supporto[i]!='\0';i++)
if (supporto[i]==' ')
nparole++;
return nparole;
}
Il problema sta nella funzione CreaCifra quando tento di deallocare la memoria occupata da 'cifra'.
Poi ci sarebbe un altro problemarovando a commentare l'istruzione free(cifra) (ovvero non deallocando lo spazio) la funzione viene eseguita con successo ma l'esecuzione si blocca al main.
Premetto che 'debuggando' funziona correttamente,ma quando tento di eseguirlo si pianta.
Non riesco davvero a capirne il motivo
Ah.. P.s.Il file "Somma.txt" è un file di testo contenente le seguenti righe
codice:
otto cinque nove stop
due due stop
sette zero sette stop
Grazie delle risposte..