为2D阵列分配内存时的分段故障(核心转储)

时间:2016-11-17 04:35:43

标签: c file matrix segmentation-fault stdin

我试图读取从stdin重定向到2D数组的文件中的特定字符,我不确定我是否正确地为2D数组分配内存。文件中的第一行是我试图复制的矩阵的尺寸。

int hex2bin (int n){
    int i,k,mask;
    for(i = sizeof(int) * 8 - 1; i >= 0; i--){
         mask = 1 << i;
         k = n & mask;
         k == 0 ? printf("0"):printf("1");
    }
    return 0;
}

我重定向的测试文件包含

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "QueueImplementation.c"

int tester(char *s, int cnt)
{
        int num1, num2;
        if(cnt == 0)
        {
                sscanf(s, "%d %d", &num1, &num2);
                if(num1 < 2 || num1 > 20 || num2 < 2 || num2> 20)
                {
                        printf("Incorrect Matrix Dimensions!");
                        printf("\n");
                }
                return num1;
        }
}

void allocateMem(char ***cell, int n, int m)
{
        *cell=(char**)malloc(n*sizeof(int*));
        for(int i=0;i<n;i++)
                *cell[i]=(char*)malloc(m*sizeof(int));
}
int main(){
        char buffer[200];
        int j,max_row,max_col;
        int count = 0;
        int i = 0;
        while (fgets(buffer, sizeof buffer, stdin))
        {
                if(count == 0)
                        max_col = tester(buffer, count);
        count++;
        }
        max_row = count - 1;
        char** cell;
        allocateMem(&cell, max_row, max_col);
        while (fgets(buffer, sizeof buffer, stdin))
        {
                for(j = 0;j<max_col;j++)
                {
                        if(buffer[j] != '\n' && buffer[j] != ' ' && buffer[j] < '0')
                                cell[i-1][j] = (char) buffer[j];
                }
                i++;
        }
        for (i = 0;i<max_row;i++)
        {
                for (j = 0;j<max_col;j++)
                {
                        printf("%c", cell[i][j]);
                }
        }
}

主要由&#34; o&#34;和&#34;。&#34;除了单个&#34; s&#34;和&#34; e&#34;。 12和10是我试图复制的矩阵的维度,因此预期的输出应该是包含o&#39; s的矩阵以及单个&#34; s&#34 ;和&#34; e&#34;。

1 个答案:

答案 0 :(得分:1)

像这样解决:

isSaved