我是C的初学者。我想从二维数组中获得每列所有元素的总和,并放入另一个一维数组中。当编译程序试图做到这一点时,它会出错。
#include<stdio.h>
#include<stdlib.h>
int** allocArrayMatrix ( int nl, int nc);
void showArrayMatrix(int ** a, int nl, int nc);
void formArray(int ** a, int nl, int nc);
int SumArray(int ** a, int nl, int nc);
void freeMemoryArray(int** a, int nl);
int main() {
int **a, nl=10, nc=10;
int f;
int *p;
a = allocArrayMatrix(nl, nc);
if (a == NULL) {
puts("Memoria p/u tabloul 2-D nu a fost alocata");
}
else {
puts("Memoria a fost alocata cu succes");
}
formArray(a,nl,nc);
printf("nTablul bidimensional format:n ");
showArrayMatrix(a,nl,nc);
p = SumArray(a, nl,nc );
for (f=0;f<nc;f++){
printf("%dt",*(p+f));
}
freeMemoryArray(a,nl);
}
int ** allocArrayMatrix( int nl, int nc) {
int i;
int** a=(int **)malloc(nl*sizeof (int*));
if (a==NULL) return a;
for (i=0; i<nl ;i++)
{a[i] =(int*)malloc(nc*sizeof(int));
if (a[i]==NULL) return NULL;
}
return a;
}
void showArrayMatrix(int ** a, int nl, int nc)
{
int i,j;
for (i=0;i<nl;i++){
for (j=0;j<nc;j++) {
printf ("%dt", a[i][j] );}
printf("n"); }
return;
}
void formArray(int ** a, int nl, int nc)
{
int i,j;
for (i=0;i<nl;i++){
for (j=0;j<nc;j++)
a[i][j] = rand()%100-50 ;
}
return;
}
int SumArray(int ** a, int nl, int nc)
{int i,j, Sum;
static int b[10];
for (i=0; i<nc; i++){
Sum = 0;
for (j=0;j<nl;j++){
Sum = Sum + a[j][i];
}
b[i] = Sum;
}
return b;
}
void freeMemoryArray(int** a, int nl) {
int i,j;
for (i = 0; i < nl; i++) {
free(a[i]);
}
free(a);
}
这是输出
Memoria a fost alocata cu succes
Tablul bidimensional format:
33 36 27 -35 43 -15 36 42 -1 -29
12 -23 40 9 13 -24 -10 -24 22 -14
-39 18 17 -21 32 -20 12 -27 17 -15
-21 -48 -28 8 19 17 43 6 -39 -8
-21 23 -29 -31 34 -13 48 -26 -35 20
-37 -24 41 30 6 23 12 20 46 31
-45 -25 34 -23 -14 -45 -4 -21 -37 7
-26 45 32 -5 -36 17 -16 14 -7 0
37 -42 26 28 38 34 -47 1 4 49
-18 10 26 18 -11 -38 -24 36 44 -11
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
问题出在哪里?我发现这是由于内存分配不正确,但我无法解决这个问题
此函数的签名不正确:它必须返回指向int而不是int:的指针
int * SumArray(int ** a, int nl, int nc);