Ciao, data una matrice devo ottenere un vettore contenente gli elementi del suo bordo. la variabile puntata da new_size contiene il numero degli elementi che costituiscono il vettore.
questo è il mio file.h
#if !defined MATRIX_H
#define MATRIX_H
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define DIMENSIONE m->cols * m->rows
struct matrix{
size_t rows, cols;
double *data;
};
extern double *bordo_esterno(const struct matrix *m, size_t *new_size);
#endif
questo è il mio main.c
#include "matrix.h"
int main(){
double data[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
struct matrix m = { 3, 3, data };
size_t size = 0;
struct matrix *ris = bordo_esterno(&m, size);
return 0;
}
questo è il mio file.c:
#include "matrix.h"
double *bordo_esterno(const struct matrix *m, size_t *new_size){
if (m == NULL){
return NULL;
}
size_t righe = m->rows;
size_t colonne = m->cols;
size_t numero = (2 * righe) + 2 * (colonne - 2); //numero elementi bordo
double *ris = calloc(numero, sizeof(double));
if (m->cols == 1 && m->rows == 1){
*new_size = 1;
ris = realloc(ris, sizeof(double));
ris[0] = m->data[0];
return ris;
}
size_t i = 0;
for (i = 0; i < m->cols; i++){
ris[i] = m->data[i];
}
for (size_t k = (m->cols * 2) - 1; k < DIMENSIONE; k += m->cols){
ris[i] = m->data[k];
i++;
}
for (size_t j = DIMENSIONE - 2; j > DIMENSIONE - m->cols - 1 ; j--){
ris[i] = m->data[j];
i++;
}
for (size_t s = m->cols ; s > 0; s -= m->cols){
ris[i] = m->data[s];
i++;
}
*new_size = numero;
return ris;
}
sono abbastanza sicuro che il programma sia corretto, però quando arriva alla riga di codice:
*new_size = numero;
, esce una schermata 'strana' che mi blocca il programma(smettendo di funzionare), e di conseguenza non riesce a ritornare ris.. qualcuno sa che cosa ho sbagliato?