【发布时间】:2019-05-01 21:21:48
【问题描述】:
我仍在学习 C 中的数组指针和动态内存分配。我在使用 realloc() 方法来增加二维数组的列数和行数时遇到了一些麻烦。在这个方法中,我想根据用户输入来调整数组大小。
char **read(int *rows, int *columns){
char **array = NULL;
char input;
int sizeRow = 0;
int sizeCol = 0;
int r = 0;
int c;
do{
for(c = 0; ((input = getchar()) != '\n'); ++c){
if (c == sizeCol) {
sizeCol = 1 + sizeCol * 3/2;
*(array) = (char *)realloc(array, sizeCol * sizeof *(array)[r]);
}
array[r][c] = input;
}
if (r == sizeRow) {
sizeRow = 1 + sizeRow * 3/2;
array = (char **)realloc(array, sizeRow * sizeof **array);
}
r++;
}while (input != EOF);
return array;
}
我得到的错误是:分段错误:11
【问题讨论】:
-
什么是
w,你是说r吗? -
您需要重新考虑您的逻辑流程。如果
array为NULL,当你做*(array)时会发生什么? -
详细信息
char **Array不是二维数组。那是pointer to pointer to char。char TwoD[3][4];是一个二维数组。 -
注意
for(c = 0; ((input = getchar()) != '\n'); ++c){...}在遇到文件结束时是一个无限循环。 -
你想要一个 string 指针数组吗?调用代码应该如何确定读取的行数?可能会附加一个最终的
NULL指针作为最后一个字符串指针。
标签: c arrays multidimensional-array dynamic-memory-allocation realloc