我有一个2d指针,我用它作为矩阵。对于每个满满偶数的行,我想添加另一行将具有元素总和的行。 例如:
初始
1 1 1
12 14 16
3 3 3
最终
1 1 1
12 14 16
3 5 7
3 3 3
我有以下代码,我认为我有一个转移错误,可能会给我一些消息。
#include <stdio.h>
#include <stdlib.h>
int suma(int x) //sum function
{
int s = 0, r = 0;
while (x != 0)
{
r = x % 10;
s = s + r;
x = x / 10;
}
return x;
}
int main(void)
{
int i, j, n, m, p, q, ii, **a, par = 0,r;
printf("nr de rows\n");
scanf("%d", &m);
printf("columns\n");
scanf("%d", &n);
a = (int**)malloc(m*sizeof(int*));
for (i = 0; i < m; i++)
{
a[i] = (int*)malloc(n*sizeof(int));
}
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
printf("a[%d][%d]=", i + 1, j + 1);
scanf("%d", &a[i][j]);
}
}
printf("\n\n\nmatricea initiala\n"); //initial matrix
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
printf("%d\t", a[i][j]);
}
printf("\n");
}
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
if (a[i][j] % 2 == 0)
{
par++;
}
else
{
par = 0;
}
}
if (par == n)
{
m++;
a = (int**)realloc(a, m*sizeof(int*));
a[m] = (int*)malloc(n*sizeof(int));
for (p = m; p >i; p--)
{
for (q = 0; q < n; q++)
{
a[p][q] = a[p - 1][q];
}
}
par = 0;
for (r = 0; r < n; r++)
{
a[i + 1][r] = suma(a[i][r]);
}
i--;
}
par = 0;
}
printf("\nmat finala\n"); //final matrix
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
printf("%d\t", a[i][j]);
}
printf("\n");
}
}
答案 0 :(得分:3)
修复点:
1。return x;
- &gt; return s;
2。for (i = 0; i < m; i++)
- &gt; for (i = m-1; i >= 0; --i)
:从底部到顶部的过程
3.在realloc之后,a[m] = (int*)malloc(n*sizeof(int));
- &gt; a[m-1] = (int*)malloc(n*sizeof(int));
:a [m]超出界限
4。for (p = m; p >i; p--)
- &gt; for (p = m-1; p >i+1; p--)
5。i--;
- &gt; //i--;
:不再需要它了。