Ich muss eine Struktur erstellen, die ein 2D-Array enthält, aber die Array-Größe kann variieren, so dass ich es nicht mit einer konstanten Länge definieren kann. Ich habe versucht, dies mit einem Doppelzeiger zu lösen, nur um herauszufinden, dass der Doppelzeiger nicht dasselbe wie ein Doppel-Array ist. Wie kann ich das tun?Wie werden 2D-Arrays in einer C-Struktur verwendet?
struct GaussianKernel {
int r;
double weightSum;
double **kernel;
};
GaussianKernel initializeKernel2D(jdouble sigma){
int r = (int) ceil(3 * sigma);
int kernelLen = 2 * r + 1;
double G[kernelLen][kernelLen];
double weightSum = 0;
double temp;
for (int y = -r; y <= r; y++)
{
for (int x = -r; x <= r; x++)
{
temp = exp(-(pow(x, 2) + pow(y, 2))/(2 * pow(sigma, 2)))/(2 * PI * pow(sigma, 2));
G[y + r][x + r] = temp;
weightSum = weightSum + temp;
}
}
struct GaussianKernel GKernel;
GKernel.r = r;
GKernel.kernel = G;
GKernel.weightSum = weightSum;
return GKernel;
}
Hinweis speichern kann, dass Ihr Code versucht, einen Zeiger auf eine Rückkehr lokale Variable - das ist schrecklich falsch. Sie müssen die dynamische Zuordnung verwenden. Wie viel Kontrolle haben Sie darüber, wo diese Struktur verwendet wird? Was wirst du an Funktionen weitergeben, die du nicht geschrieben hast? Eine Option besteht einfach darin, einen Vektor mit geeigneten Größen von "doppelten" Werten zuzuweisen und diesen dann mit den Ausdrücken "gk-> kernel [row * (2 * gk-> r + 1) + col]" (statt "gk- > kernel [row] [col] '), obwohl es besser wäre, die Array-Größe explizit in der Struktur aufzuzeichnen. Das ist mehr oder weniger trivial. Die Alternativen, falls verfügbar, sind unordentlich. –