Си/си++.

у меня в программе написано вроде всё правильно а при компиляции есил я ввожу 2 и 3 то мне выдаёт такую матрицу 0 0 -23526 0 0 -23544 массив сумм -2325 -2346
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main(void)
{int i,j,n,m;
int **masa;
int *masb;
printf("\n текст"
" текст \n");
scanf("%d%d",&n,&m);
printf("\n текст \n ",n,m);
masa=(int**)calloc(m,sizeof(*masa)) ;
for(i=0;i<n;i++)
masa[i]=(int*)calloc(n,sizeof(*masa[i]));
fflush(stdin);
printf("\n исходный масив n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%7d",masa[i][j]);
}
printf("\n");
}
masb=(int*)calloc(n,sizeof(masb));
for(i=0;i<n;i++)
for(j=0;j<m;j++)
masb[i]=masb[i]+masa[i][j];
printf("\n бд®а¬Ёа®ў***л© ¬*ббЁў б㬬 ");
printf("\n");
for(i=0;i<n;i++)
printf("%7d",masb[i]);
for(i=0;i<n;i++)
free(masa[i]);
free(masa);
free(masb);
getch();
return 0;
}
программа работает только не так как надо м.б. ошибка в выделении или я строчки не так поставил что прога выделяет неправильно динамическую память как сделать так чтобы при компиляции были нормальные целые числа? заранее спасибо
9 ответов

а чтобы натуральными числами заполнялся то нужно через malloc делать?


а чтобы натуральными числами заполнялся то нужно через malloc делать?
для этого нужно их вводить вручную
for(i=0;i<n;i++)
{
 for(j=0;j<m;j++)
 {
 printf("\nmas[%d][%d] = ",i,j);
 scanf("%d",&mas[i][j]);
 }
}
или рандомно
#include <time.h>
...

srand(time(0));
for(i=0;i<n;i++)
{
 for(j=0;j<m;j++)
 {
 mas[i][j]=rand()%10;
 }
}


#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main(void)
{int i,j,n,m;
int **masa;
int *masb;
printf("\n текст"
" текст \n");
scanf("%d%d",&n,&m);
printf("\n текст \n ",n,m);
masa=(int**)calloc(m,sizeof(*masa)) ;
for(i=0;i<n;i++)
masa[i]=(int*)calloc(n,sizeof(*masa[i]));
fflush(stdin);
printf("\n исходный масив n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%7d",masa[i][j]);
}
printf("\n");
}
masb=(int*)calloc(n,sizeof(masb));
for(i=0;i<n;i++)
for(j=0;j<m;j++)
masb[i]=masb[i]+masa[i][j];
printf("\n массив b");
printf("\n");
for(i=0;i<n;i++)
printf("%7d",masb[i]);
for(i=0;i<n;i++)
free(masa[i]);
free(masa);
free(masb);
getch();
return 0;
}
если так писать то результат остаётся одним и тем же только выаётся сообщение введите 64 стоки по 1024 сивола


lutuygrey1, ты долго будешь одно и то же переписывать тут? А то, что тебе пишут ты вообще читаешь?
если так писать то результат остаётся одним и тем же только выаётся сообщение введите 64 стоки по 1024 сивола
это вообще откуда взялось? ты вообще этот код сам написал(а)?вот рабочий вариант
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>

int main(void)
{
	int i,j,n,m;
	int **masa;
	int *masb;
	
	printf("\n M N\n");
	scanf("%d%d",&n,&m);
	
	masa=(int**)calloc(n,sizeof(int));
	for(i=0;i<n;i++)
		masa[i]=(int*)calloc(m,sizeof(int));
	fflush(stdin);
	printf("\nMass A\n");
	
	srand(time(0));
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
		{
			masa[i][j]=rand()%10;
			printf("%7d",masa[i][j]);
		}
		printf("\n");
	}
	
	masb=(int*)calloc(n,sizeof(masb));
	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
			masb[i]=masb[i]+masa[i][j];
	printf("\nMass B");
	printf("\n");
	
	for(i=0;i<n;i++)
		printf("%7d",masb[i]);
	
	for(i=0;i<n;i++)
		free(masa[i]);
	free(masa);
	free(masb);
	getch();
	return 0;
}


Крайне нечитабельно=\ Почему calloc, а не malloc? =)
masa=(int**)calloc(m,sizeof(*masa)) ;
masa[i]=(int*)calloc(n,sizeof(*masa[i]));
masb=(int*)calloc(n,sizeof(masb));
->
masa=(int**)calloc(m,sizeof(int)) ;
masa[i]=(int*)calloc(n,sizeof(int));
masb=(int*)calloc(n,sizeof(int));
Там надо писать размер одного элемента. А вы пишите размер от указателя =)


пробовал =теперь вместо этого все нули в исходной матрице и в результирующем массиве. если через функцию malloc делать то будет так masa=(int**)malloc(m,sizeof(int)) ; masa[i]=(int*)malloc(n,sizeof(int)); masb=(int*)malloc(n,sizeof(int));?? ???????????????


что-то не видно, где вы заполняете этот массив значениями...


c помощью функции calloc заполняется массив..может надо так написать
masa=(int**)malloc(**n,sizeof(int)) ;
masa[i]=(int*)malloc(*m,sizeof(int));
masb=(int*)malloc(**n,sizeof(int))


masa=(int**)calloc(<b>n</b>,sizeof(<b>int</b>)) ;
for(i=0;i<<b>n</b>;i++)
masa[i]=(int*)calloc(<b>m</b>,sizeof(<b>int</b>));
...
masb=(int*)calloc(<b>n</b>,sizeof(<b>int</b>));
c помощью функции calloc заполняется массив..
нулями...