繁体   English   中英

使用动态内存分配在二维数组中添加值

[英]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.
  1. 通过根据对象的大小而不是类型的大小进行分配,避免使用错误的大小进行分配的错误。 如果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 
  2. 使用正确的索引ji @BLUEPIXY 这肯定是OP的问题。

     for (j = 0;j < dimc;j++) { // m[i] = (int *)malloc(diml*(sizeof(int))); m[j] = malloc(sizeof *(m[j]) * diml); 
  3. 确保编译器警告完全启用 - 应该已经捕获了这个警告。

     // scanf("%*d", m[j][i]); scanf("%d", &m[j][i]); 
  4. 建议检查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; } 
  5. main()应该返回int

     #include <stdlib.h> int main(void) { ... return EXIT_SUCCESS; } 
  6. 在推广时,确保输出被打印并且不被缓冲。 使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM