C char ****阵列动态分配尴尬



已经过去了20个小时,我仍然不知道问题是什么。

首先,有这些参数的主要功能。

  char ***matrix;
  int line, maxCollumn, i, j;
  int lineData[100];

然后我正在调用该函数

PutFirstAndLast(&matrix, &line, &maxCollumn, lineData);

此功能旨在动态分配我的矩阵并返回其线路和碰撞的数量。linedata用于存储我在每行中有多少个项目,因为稍后在功能中,我必须用"。

填充"空"空间

我的令人不安的功能具有此标头

int PutFirstAndLast(char**** matrixPointer, int *line2, int *maxCollumn2, int *lineArray)

在此函数中,我将以半误解的方式"数组"生成一个新矩阵,我将以订单中的新"数组"为内存分配内存,以将每个单词从文件中" in.txt"放入其中。

int PutFirstAndLast(char**** matrixPointer, int *line2, int *maxCollumn2, int     *lineArray)
 {
FILE *inputFile;
char buffer[100], *p;
char ***array;
int i, j, collumn, maxCollumn = 0, line = -1;


inputFile = fopen("in.txt", "r");
while (fgets(buffer, 100, inputFile))
{
    line++;
    collumn = 0;

    if (line == 0)
        array = (char***)malloc(sizeof(char**));
    else
        array = (char***)realloc(array, sizeof(char**)* (line + 1) );


    p = strtok(buffer, " n");

    while (p)
    {
             //taking each word and allocating a space for it
        if (collumn == 0)
            array[line] = (char**)malloc(sizeof(char*));
        else
            array[line] = (char**)realloc(array[line], sizeof(char*)*  (collumn + 1));

        array[line][collumn] = (char*)malloc(sizeof(char)* strlen(p) + 1);

        strcpy(array[line][collumn], p);
        collumn++;
        p = strtok(NULL, " n");
    }

          // Here i count what is the maximum numbers of items on a line

    lineArray[line] = collumn;
    if (collumn > maxCollumn)
        maxCollumn = collumn;

}

    // Here i add "" in the "empty spaces.
for (i = 0; i < line + 1; i++)
{
    for (j = lineArray[i]; j < maxCollumn; j++)
    {
        array[i] = (char**)realloc(array[i], sizeof(char*)* maxCollumn);
        array[i][j] = (char*)malloc(sizeof(char)* 10);
        strcpy(array[i][j], "");
    }
}
fclose(inputFile);

*matrixPointer = array;
*maxCollumn2 = maxCollumn;
*line2 = line;
return 0;
 }

问题是,当我来到Main并这样做

for (i = 0; i < line + 1; i++)
{
    for (j = 0; j < maxCollumn; j++)
    {
        printf("%s", matrix[i][j]);
        matrix[i][j] = (char*)realloc(matrix, sizeof(char)* 11);
    }
}

对于项目矩阵[2] [0]有一个错误"违规读取位置"。

bur如果我做

for (i = 0; i < line + 1; i++)
    {
        for (j = 0; j < maxCollumn; j++)
        {
            printf("%s", matrix[i][j]);
        //  matrix[i][j] = (char*)realloc(matrix, sizeof(char)* 11);
        }
    }

没有问题,我来自矩阵的所有单词都显示在屏幕上

我的文本模型是:

etesta este astru   
de mext pentru bun 
examen multa programare  

通过在"空"空间中添加",我指的是:puttin the the Liellike the the:

etesta   este      astru         
de       mext      pentru        bun 
examen   multa     programare    

当应为 matrix[i][j]时,您可以使用matrix指针调用realloc功能:

matrix[i][j] = realloc(matrix[i][j], sizeof(char)* 11);

或,如果您想保护自己免受故障的侵害:

char *temp = realloc(matrix[i][j], sizeof(char)* 11);
if (temp != NULL)
    matrix[i][j] = temp;

注意:不要在c。

中施放 malloc(或 realloc

相关内容

  • 没有找到相关文章

最新更新