У меня есть указатель на матрицу, которую я получил от функции C, и мне нужно заполнить другой массив, который я получил от той же функции C, и мне нужно заполнить его суммами каждого столбца матрицы. Проблема заключается в том, что после заполнения массива он возвращается к функции C и при попытке печати массива приводит к печати несвязанных чисел (возможно, адресов) вместо фактической суммы столбцов.
Вот код из функции C:
#include <stdio.h>
#include <stdlib.h>
extern void sum_col(int n, int m, long int *matrix[], long int new_col[]);
int main() {
int n = 4, m = 3, i, j;
long int *matrix[4];
long int new_col[3];
for (i = 0; i < n; i++)
matrix[i] = (long int *)malloc(m * sizeof(long int));
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
matrix[i][j] = 100 * i + j;
sum_col(n, m, matrix, new_col);
printf("matrix:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) printf("%8ld", matrix[i][j]);
printf("\n");
} // for
printf("new_col:\n");
for (i = 0; i < m; i++)
printf("%8ld", new_col[i]);
return 0;
} // main
А вот код сборки:
.MODEL SMALL
.DATA
SUM DW ?
I DW ?
J DW ?
K DW ?
.CODE
PUBLIC _sum_col
_sum_col PROC NEAR
PUSH BP
MOV BP,SP
PUSH SI
PUSH DI
MOV I,0
MOV J,0
MOV K,0
MOV CX,[BP+6] ; CX = m
MOV BX,[BP+4] ; BX = n
MOV SI,[BP+8] ; SI = matrix
MOV DI,[BP+12] ; DI = new_col
L1:
MOV SUM,0
PUSH CX
MOV CX,BX
MOV I,0
L2:
MOV SI,[BP+8]
ADD SI,I
MOV AX,[SI]
MOV SI,AX
ADD SI,J
MOV AX,[SI]
ADD SUM,AX
ADD I,2
LOOP L2
MOV AX,SUM
ADD DI,K
MOV [DI],AX
ADD J,4
ADD K,4
POP CX
LOOP L1
POP DI
POP SI
POP BP
RET
_sum_col ENDP
END
Может кто-нибудь сказать мне, где я ошибся?