c-具有矩阵和自动化功能的Realloc



我想知道,如果我做了这样的事情,为什么char*或任何1D数组的realloc有效oldpointer=realloc(oldpointer,newsize);

但当我尝试使用2D char*数组时,它失败了。环顾四周,我发现有时人们会使用NewPointer=realloc(oldpointer,newsize),但如果它是唯一的用途,它对我来说就没有用了,因为我需要经常在循环中调整矩阵的列和行的大小(我必须填充一个字符串数组,而不知道我将插入多少字符串,也不知道每个字符串的大小)

我用来尝试的代码是这个,

void main(){
    int max = 5, i,j;
    char **matrix;
    matrix=malloc(max*sizeof(char));
    for(i=0;i<max;i++){
        matrix[i]=malloc(max*sizeof(char));
    }
    matrix=realloc(matrix,max*2*sizeof(char));
    strcpy(matrix[4],"we");
    printf("%s",matrix[4]);
}

"中出错/out':realloc():无效的下一个大小:0x00000000015c4010***中止

问题是您的双指针无法容纳指针,因为您没有分配足够的空间。

matrix = malloc(max * sizeof(char));
/* which is exactly the same as
 * matrix = malloc(max);
 */

应该是

matrix = malloc(max * sizeof(char *));
/*                        ^ max pointers, so sizeof a poitner */ 

如果你想realloc(),你可以这样做

void *pointer;
pointer = realloc(matrix, 2 * max * sizeof(char *));
if (poitner == NULL)
    handleFailure_OrExit_ButDoNot_Use_The_Realloced_Poitner();
matrix = pointer;

如果函数返回值,则始终检查函数的返回值,例如malloc()/calloc()/realloc()"和任何自定义实现正常",失败时返回NULL

首先,您的matrixchar*的数组,因此您应该分配:

matrix=malloc(max * sizeof(char*));

对于CCD_ 8。

您也不需要"we""we"就足够了。所有双引号中的字符串都是以NUL结尾的字符串文字。为char*char中的每一个分配足够的内存,您应该是优秀的。

相关内容

  • 没有找到相关文章

最新更新