代码139(被信号11:SIGSEGV中断),我是C中的beginer



我是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);

相关内容

最新更新