arrays - 二维数组函数的C重新分配
问题描述
我的重新分配不起作用(11.element 的分段错误),我想将数组放大两次,根据第一个输入,列的长度是恒定的。我想在函数中分配。在函数 vztvorPole 中,我分配了一个 10 行 x 列的数组。
char vytvorPole(char ***grid, int nrows, int ncols)
{
*grid = malloc( sizeof(*grid)*nrows);
if (*grid == NULL)
{
printf("ERROR\n");
return 1;
}
for(int i=0;i<nrows;i++)
{
(*grid)[i]=(char *) malloc (ncols*sizeof(*grid));
if((*grid)[i] == NULL)
{
printf("ERROR\n");
return 1;
}
}
return 0;
}
char realokuj(char ***grid, int nrows, int ncols)
{
char **docasne;
docasne = (char**)realloc (*grid, nrows*sizeof(*grid));
for(int i=nrows/2;i<nrows;i++)
{
(docasne)[i]=(char *) malloc (ncols*sizeof(*grid));
}
*grid = docasne;
}
int main (void)
{
char **diagonaly;
int rDiagonaly = 10;
int cDiagonaly = -1;
char *str = NULL;
size_t capacity = 0;
int first = 1;
int nr = 0;
printf("Vypln:\n");
while ( getline (&str, &capacity, stdin) != -1)
{
if(str[0] == '\n')
break;
if (first)
{
cDiagonaly = strlen (str);
vytvorPole(&diagonaly, rDiagonaly, cDiagonaly);
first = 0;
}
if (nr==rDiagonaly)
{
rDiagonaly *= 2;
realokuj(&diagonaly, rDiagonaly, cDiagonaly);
}
strcpy(diagonaly[nr],str);
nr++;
}
}
解决方案
这样的事情可以吗?
while ( getline (&str, &capacity, stdin) != -1)
{
if(str[0] == '\n')
break;
if (first)
{
cDiagonaly = strlen (str);
diagonaly = (char**) malloc(sizeof(*diagonaly)*rDiagonaly);
if (nr==rDiagonaly)
{
rDiagonaly *= 2;
docasne = (char**)realloc (diagonaly, rDiagonaly*sizeof(*diagonaly));
diagonaly=docasne;
}
diagonaly[nr]=(char*) malloc (cDiagonaly*sizeof(**diagonaly));
strcpy(diagonaly[nr],str);
nr++;
}
推荐阅读
- python - Google Places 在 Flask 中返回一张图片
- python - 连接两列并在python的新列中打印文本
- java - org.xerial.snappy 中的 java.lang.NegativeArraySizeException。解压大文件时
- go - 以官方方式移除已发布的模块
- javascript - 使用 Jquery 克隆 HTML 元素并将单个按钮附加到每个元素
- mysql - 如何使用sql查询从多对多关系中删除重复条目
- flutter - 状态管理和实例
- nginx - 如何验证 nginx 反向代理根证书?
- node.js - CORS 在 Express 处理的备用请求上失败
- c++ - 混合内联和构造函数初始化的初始化顺序