Coords** latLng;
//...
latLng[0] = AdicionaValores(latLng[0],-23.000490,-43.346687);
latLng[1] = AdicionaValores(latLng[1],-22.988243,-43.342224);
Здесь вы объявляете указатель на указатель на структуру Coords
, но продолжаете разыменовывать неинициализированный указатель в следующих двух строках. На данный момент latLng
не является допустимым указателем и может иметь любое значение.
Вы вызываете неопределенное поведение. Вам нужно инициализировать latLng
перед разыменованием его на основе количества подэлементов (указателей на Coord
), на которые оно будет указывать. Затем вы можете продолжить инициализацию подэлементов, например так:
Coords* latLng[2];
//...
latLng[0] = // some assignment
latLng[1] = // some assignment
Другая проблема, которую вы, возможно, еще не осознали, заключается в том, что ваш malloc
не влияет на значение указателя, который вы передали в функцию AdicionaValores
. Вы передаете указатель по значению. Если вы хотите присвоить новое значение исходному указателю, вам нужно будет передать указатель на него, т. Е.
private Coords* AdicionaValores( Coords** q, double x, double y )
{
*v = (Coords*) malloc(sizeof(Coords));
}
Кажется, это работает, потому что вы просто возвращаете указатель. Вам не нужно принимать первый параметр вообще, потому что он никогда не используется. Просто опустите его и верните новый указатель.