C字符****数组动态分配行为异常

C字符****数组动态分配行为异常,c,string,matrix,stream,dynamic-memory-allocation,C,String,Matrix,Stream,Dynamic Memory Allocation,大约20个小时过去了,我仍然不知道问题出在哪里 首先,有这些参数的主函数 char ***matrix; int line, maxCollumn, i, j; int lineData[100]; 然后我调用这个函数 PutFirstAndLast(&matrix, &line, &maxCollumn, lineData); 此函数用于动态分配矩阵,并返回其行数和合谋数。lineData用于存储每行上有多少项,因为在函数的后面部分,我必须用“”填充“空

大约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”中的每个单词放入其中

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

etesta   este      astru         
de       mext      pentru        bun 
examen   multa     programare    

realloc
函数应该是
matrix[i][j]
时,使用
matrix
指针调用该函数:

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;

注意:.

realloc
函数应该是
matrix[i][j]
时,使用
matrix
指针调用该函数:

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;

注意:.

检查
realloc
调用失败的第一个参数。您没有重新分配正确的指针。另外,您应该小心地将重新分配给重新分配的指针,如果
重新分配失败怎么办?然后你松开了原来的指针。是的,但问题是我不能想象在这种情况下,什么是propper重新分配?我现在就去检查一个失败。你不应该重新分配
矩阵[I][j]
而不是
矩阵
?你也根本不需要第一个malloc。只需确保
array
最初为空,然后再进行此操作。我仍然盯着解引用(那是很多星星,坦率地说是不常见的)。@JoachimPileborg“你不应该重新分配矩阵[I][j]而不是矩阵吗?”这是正确的答案。你应该做一个。检查
realloc
调用的第一个失败的参数。你没有重新分配正确的指针。另外,你应该小心地重新分配回你重新分配的同一个指针,如果
重新分配
失败怎么办?然后你失去了原始指针。是的,但问题是在这种情况下,我不知道什么是propper重新分配?我现在就去检查失败。你不应该重新分配
矩阵[i][j]
而不是
矩阵
?您也根本不需要第一个malloc。只需确保
数组
在进入此过程之前最初是空的。我仍然在盯着解引用(这是很多星星,坦率地说是不常见的)。@JoachimPileborg“您不应该重新分配矩阵[I][j]而不是矩阵吗?”这是正确的答案。你应该把它变成一个。“JoaCHIMPILBOG:虽然它是正确的,不是一个针对4星级编程的建议吗?SRY Mod,Vor VoTup我需要15个RDP,但是我长大后会回来!注意:我把ReLoLc投了,因为我的编译器是C++基础哇,你快到100K了!我捐了另外10个;@ JoachimPileborg:尽管它是正确的,但不是一个针对4星级编程的推荐吗?SRY Myor,Vor VoTup我需要15个RDP,但是我长大后会回来!注意:我把ReLoLc转换为因为我的编译器是C++ BASED哇,你快到100K了!我又捐献了10个;
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;