Я новичок в программировании на C .. Когда я строил proj, поток памяти возник в функции "matrixInit".ИДК, почему это происходит .. Я хочу решить эту проблему, поэтому вы можете сказать причину, по которой возник этот поток и как я могу ее решить?
(скомпилировано в Xcode)
main.c
#include <stdio.h>
#include "array2DvariableSize.h"
int main(int argc, const char * argv[]) {
// insert code here...
printf("Hello, World!\n");
item a[] = {1,2,3,2,3,4,1,2,2};
item b[] = {2,4,3,4,3,4,1,5,2};
Matrix *m1 = matrixNew(3, 3);
matrixInit(m1, a);
matrixPrint(m1);
Matrix *m2 = matrixNew(3, 3);
matrixInit(m2, b);
matrixPrint(m2);
Matrix *m3;
m3 = matrixAdd(m1, m2);
matrixPrint(m3);
matrixFree(m1);
matrixFree(m2);
matrixFree(m3);
return 0;
}
array2DvariableSize.h
#ifndef array2DvariableSize_h
#define array2DvariableSize_h
#include <stdio.h>
typedef int item;
typedef struct {
int col;
int row;
item** var;
}Matrix;
Matrix* matrixNew(int row, int col);
void matrixInit(Matrix* m, item* src);
void matrixFree(Matrix* m);
Matrix* matrixMultiply(const Matrix* a, const Matrix* b);
Matrix* matrixAdd(const Matrix* a,const Matrix* b);
void matrixPrint(Matrix* m);
#endif /* array2DvariableSize_h */
array2DvariableSize.c
#include "array2DvariableSize.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Matrix* matrixNew(int row, int col){
Matrix* m;
m = (Matrix*)malloc(sizeof(Matrix));
m -> row = row;
m -> col = col;
m -> var = (item**)malloc(sizeof(item*)*row);
for (int i = 0; i<row; i++){
m->var[i] = (item*)malloc(sizeof(item)*col);
memset(m->var[i], 0, sizeof(item)*col);
}
}
return m;
}
void matrixFree(Matrix* m){
for (int i = 0 ; i < m -> row; i++){
free(m->var[i]);
}
free(m->var);
free(m);
}
void matrixInit(Matrix* m, item* src){
for(int j = 0 ; j< m->row; j++){
for(int i = 0; i < m->col; i++){
m->var[j][i] = src[j*m->col + i]; // Thread occurred in herd
}
}
}
Matrix* matrixAdd(const Matrix* a, const Matrix* b){
Matrix* m;
if(a->col != b->col || a->row != b->row) return NULL;
m = matrixNew(a->row, a->col);
for(int j = 0; j < a->row; j++){
for(int i = 0; i < a->col; i++){
m->var[j][i] = a->var[j][i] + b->var[j][i];
}
}
return m;
}
Matrix* matrixMultiply(const Matrix* a, const Matrix* b){
Matrix* m;
int col, row, iter;
if(a->col != b->row) return NULL;
row = a->row;
col = b->col;
iter = a->col;
m = matrixNew(row, col);
for (int j = 0; j<row; j++){
for(int i= 0; i< col; i++){
for(int k = 0; k < iter; k++){
m->var[j][i] += a->var[j][k] * b->var[k][i];
}
}
}
return m;
}
void matrixPrint(Matrix* m){
for(int j = 0; j < m->row; j++){
for(int i = 0; i < m->col; i++){
printf("%5d", m->var[j][i]);
}
printf("\n");
}
printf("\n");
}
Спасибо, что прочитали мой вопрос:)