像20小时过去了,我仍然没有manange得到什么问题。C char ****阵列动态分配行为尴尬
首先,有这些参数的主要功能。
char ***matrix;
int line, maxCollumn, i, j;
int lineData[100];
然后我打电话此功能旨在动态地分配我的矩阵,并返回其线条和collumns的号码的功能
PutFirstAndLast(&matrix, &line, &maxCollumn, lineData);
。 lineData用于存储每条线上有多少物品,因为稍后在函数中我必须用“”填充“空”空格。
我的令人不安的函数具有该头
int PutFirstAndLast(char**** matrixPointer, int *line2, int *maxCollumn2, int *lineArray)
在这个函数中,我将产生一个所谓的在半延迟方式“阵列”新的矩阵,我将在orded到新的“阵列”分配存储器从文件“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;
}
问题是,当我来主要和我对项矩阵为此
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]有错误“ACCES违反读取位置”。
钻,如果我做
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
检查失败的'realloc'调用的第一个参数。你不重新分配正确的指针。另外,你应该小心地分配回你重新分配的同一个指针,如果'reallocate'失败怎么办?然后你松开原来的指针。 –
是的,但问题是,我不能figuire在这种情况下什么是propper重新分配?我现在正在检查失败。 –
你不应该重新分配'matrix [i] [j]'而不是'matrix'吗? –