2011-03-10 2 views
1

Je suis novice en matière de pointeurs et j'ai donc un peu de difficulté. Je crois cependant que la solution à ce problème devrait être facile pour vous, experts. Le problème est dans le code.Accéder aux données dans un tableau avec des pointeurs

// flags is an array of data that I create, manipulate, but now having trouble accessing elsewhere. 
int *flags = (int *) malloc(1* sizeof(int)); // let us start with 1 and then add more within the method. This should continue until we have all the flags we want. 
int number_of_flags = event_extractor(vocal_data, size, flags); 

// I want to use flags here, but it doesn't work 

place_effects_on_events(vocal_data, flags, number_of_flags , events_with_effects); 

LES AUTRES MÉTHODES:

int event_extractor (int *audio_samples, unsigned int size_of_audio, int *flags) 
{ 

int number_of_flags = apply_threshold (lopass_samples, length, &flags); 

    // the data prints absolutely correctly here. 
for (int i = 0; i < number_of_flags; i++) { 
    printf("FLAG %i -- %d \n", i, flags[i]); 
} 
} 





int apply_threshold (int *audio_samples, unsigned int size_of_audio, int **event_flags) 
{ 


int flag = 0; // this will be the number of flags that I have 
bool run = true; // this will make sure that a minimum amount of time passes before I grab another flag. It's a guard. 
int counter = 0; // this is the counter for the above guard. 




int threshold = calculate_threshold_value(audio_samples, size_of_audio); 



int length = (int)size_of_audio; 




for (int i = 0; i < length-1; i++) 
{ 

    if (audio_samples[i] > threshold && run) 
    { 


     *event_flags = (int*)realloc(*event_flags, sizeof(int) * (flag + 1)); 
     (*event_flags)[flag] = i; 

     flag++; 
     run = false; 


    } 

    if (!run) { 
     counter++; 
     if (counter > 20100) { // hardcode minimum size for now. 
      counter = 0; 
      run=true; 
     } 
    } 



} 


for (int i = 0; i <10 ; i++) { 
    printf("VOCAL SAMPLE %i %i \n", i-5,audio_samples[*event_flags[1]+i-5]); 
} 

return flag; 

} 

LE PROBLÈME EST ICI

void place_effects_on_events (int *vocal_samples, int *flags, int number_of_flags ,int *events_with_effects) 
{ 


// here the data does not print correctly 
for (int i = 0; i < number_of_flags; i++) { 
    printf("FLAG %i -- %d\n", i, flags[i]); 
} 

Répondre

2

Vous devez passer un pointeur vers flags-event_extractor:

int number_of_flags = event_extractor(vocal_data, size, &flags); 

et changer son prot OTYPE à

int event_extractor (int *audio_samples, unsigned int size_of_audio, int **flags) 

Sinon, flags lui-même jamais mis à jour et les points encore à la première zone de mémoire malloc ed. Étant donné que cette zone de mémoire n'existe plus à ce moment, l'accès à son contenu entraînera des résultats indéfinis.

0

vous transmettez des indicateurs à event_extractor. Essayez de lui passer des drapeaux &. Je pense que vous voulez mettre à jour les drapeaux après avoir appelé la fonction event_extractor. Un autre point: vous ne renvoyez pas number_of_flags de la fonction event_extractor.

Questions connexes