[英]add values in a 2 dimensional array using dynamic memory allocation
鉴于此任务:
编写一个程序,分配必要的内存量来存储来自两个
[mxn]
整数矩阵的元素。
我不知道如何为2维数组分配内存。
我读了一些例子,但我没理解。
#define _CRT_SECURE_NO_WARNINGS
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define DIM 10
void main()
{
int **m, *n;
int i = 0, j = 0;
int diml, dimc;;
puts("Introduceti dimensiunea matricelor(linii|coloane)");
scanf("%d%d", &diml, &dimc);
m = (int**)malloc(dimc*sizeof(int));
puts("Introduceti elementele primei matrici:");
for (j = 0;j < dimc;j++)
{
m[i] = (int *)malloc(diml*(sizeof(int)));
}
for (j = 0;j < dimc;j++)
{
for (i = 0;i < diml;i++)
{
printf("tab[%d][%d]= ", j + 1, i + 1);
scanf("%*d", m[j][i]);
}
}
_getch();
}
进入第一行后我的程序崩溃了。
Introduceti dimensiunea matricelor(linhi I coloane)
3
3
Introduceti elementele primei matrici:
ab[1][1]= 2
ab[1][2]= 1
ab[1][3]= 2
ab[2][1]=
Problema 3.exe has stopped working
A problem caused the program to stop working correctly.
Windows will closethe program and notify you if a solution is
available.
通过根据对象的大小而不是类型的大小进行分配,避免使用错误的大小进行分配的错误。 如果sizeof(int)
小于sizeof(int *)
,这将解释OP的问题。
// m = (int**)malloc(dimc*sizeof(int)); // Original // m = (int**)malloc(dimc*sizeof(int *)); // corrected type // m = malloc(dimc*sizeof(int *)); // cast not needed m = malloc(sizeof *m * dimc); // best : sizeof object
使用正确的索引j
与i
@BLUEPIXY 。 这肯定是OP的问题。
for (j = 0;j < dimc;j++) { // m[i] = (int *)malloc(diml*(sizeof(int))); m[j] = malloc(sizeof *(m[j]) * diml);
确保编译器警告完全启用 - 应该已经捕获了这个警告。
// scanf("%*d", m[j][i]); scanf("%d", &m[j][i]);
建议检查malloc()
和scanf()
。
#include <stdlib.h> m[j] = malloc(sizeof *(m[j]) * diml); if (m[j] == NULL && diml != 0)) { fprintf(stderr", "Out of memory\\n"); return EXIT_FAILURE; } if (scanf("%d", &m[j][i]) != 1) { fprintf(stderr", "Non-numeric input\\n"); return EXIT_FAILURE; }
main()
应该返回int
。
#include <stdlib.h> int main(void) { ... return EXIT_SUCCESS; }
在推广时,确保输出被打印并且不被缓冲。 使用fflush()
或以'\\n'
结束提示。
printf("tab[%d][%d]= ", j + 1, i + 1); fflush(stdout); // add scanf(...
你应该首先这样分配:
m = (int**)malloc(dimc*sizeof(int*));
之后你就像那样分配:
m[i] = (int *)malloc(sizeof(int));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.