Я понимаю, что это, скорее всего, проблема с синтаксисом, однако у меня есть структура:
struct pixel{
int pixel_num;
double lowest_dist;
int centroid;
double * location;
};
и массив этих структур struct pixel * pixel_data[10]
и метод: void foo(double ** arr)
, и я пытаюсь передать адрес указателя location
в экземпляре структуры, чтобы обновить указатель в методе foo
.
Я попытался передать его следующим образом: foo(&(pixel_data[0]->location))
, однако это явно не правильно, поскольку при запуске через gdb значения *arr
отличаются в foo
от того, что они были в main()
, где я называю foo.
Спасибо.
Пример:
#define DIMENSIONS 5
//Struct is declared in header.
//max 10 pixels
struct pixel * pixel_data[10];
int main(){
double newLoc[DIMENSIONS]={1.1,2.2,3.3,4.4, 5.5};
pixel_data[0]=add_pixel(newLoc);
update_centroid_location(&(pixel_data[0]->location), 0, DIMENSIONS);
}
void update_centroid_location(double **centroid, int centroid_num, int numpix){
double * old_cent=malloc(DIMENSIONS*sizeof(double));
if(!old_cent){
perror("couldnt allocate memory");
exit(4);
}
for(int i=0;i<DIMENSIONS;i++){
old_cent[i]=*centroid[i]; //segfaults here as cannot access memory address
}
}
struct pixel * add_pixel(double * location){
struct pixel * new=malloc(sizeof(struct pixel));
if(!new){
perror("Could not allocate space for pixel");
exit(4);
}
new->lowest_dist=DBL_MAX;
new->centroid=0;
new->location=location;
return new;
}