gpt4 book ai didi

C char**** 数组动态分配表现尴尬

转载 作者:太空宇宙 更新时间:2023-11-04 05:59:37 24 4
gpt4 key购买 nike

大约 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)

在这个函数中,我将生成一个以半延迟方式称为“array”的新矩阵,我将为新“array”分配内存,以便将文件“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],存在错误“访问违规读取位置”。

如果我这样做了

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

通过在“空”空格中添加“”,我指的是:将“”放入数组中,如下所示:

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;

备注:Don't cast the return of malloc (or realloc) in C .

关于C char**** 数组动态分配表现尴尬,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21399886/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com