为什么我得到 realloc() 无效的旧大小
Why I get realloc() invalid old size?
我正在尝试管理 4D 动态分配的数组。else 语句中的代码给了我错误。如果我不包含 else 语句,代码就会正确,但这是一个很好的做法吗?
int**** datind = (int****) malloc(nRow * sizeof(int***));
for (size_t i = 0; i < nRow; i++) {
datind[i] = (int***) malloc(nCol * sizeof(int**));
}
for (size_t i = 0; i < nCol; i++) {
for (size_t j = 0; j < nRow; j++) {
datind[j][i] = (int**) malloc(1 * sizeof(int*));
}
}
while ( fscanf(fp1, "%d %*c %d %*c %zu", &row, &col, &n_value) != EOF ) {
if (n_value > 0) {
datind[row-1][col-1] = (int**) realloc(datind[row-1][col-1], n_value * sizeof(int*));
for (size_t i = 0; i < n_value; i++) {
datind[row-1][col-1][i] = (int*) realloc(datind[row-1][col-1][i], 6 * sizeof(int));
for (size_t j = 0; j < 6; j++) {
fscanf(fp1,"%d%*c", &datind[row-1][col-1][i][j] );
}
} else {
datind[row-1][col-1][0] = (int*) realloc(datind[row-1][col-1][0], 1 * sizeof(int));
datind[row-1][col-1][0][0] = -1;
}
}
3D 数组的类似代码,即以 int** 开头,效果很好。
解决了!好的,这有效。我在注释中包含提示以提高代码质量。无需检查行和列是否等于 0,因为我知道它们可以从 1 到 197。 谢谢。
int **datind[(2*nx-1)][(2*ny-1)];
while ( fscanf(fp1, "%d %*c %d %*c %zu", &row, &col, &n_value) != EOF ) {
if (n_value > 0) {
datind[row-1][col-1] = (int**) malloc(n_value * sizeof(*datind));
if (datind[row-1][col-1] == NULL) {
printf("Memory allocation failed.n");
return EXIT_FAILURE;
}
for (size_t i = 0; i < n_value; i++) {
datind[row-1][col-1][i] = (int*) malloc(6 * sizeof(*datind[row-1][col-1]));
if (datind[row-1][col-1][i] == NULL) {
printf("Memory allocation failed.n");
return EXIT_FAILURE;
}
for (size_t j = 0; j < 6; j++) {
fscanf(fp1,"%d%*c", &datind[row-1][col-1][i][j] );
}
}
} else {
datind[row-1][col-1] = NULL;
}
}
相关文章:
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 无法访问嵌套类.类的使用无效
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- 在没有参数列表的情况下使用模板名称"Event"无效,模板问题
- FFMPEG配置文件级别id大小无效
- 错误:从"int"到枚举c++的转换无效
- 如何修复此错误:className::className的无效使用
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- C++-模板嵌套类的引用初始化无效
- 错误:无效的预处理指令 #i 的意思是 #if?
- 多维数组 C++ 中数组下标的类型"int[int]"无效
- 为什么我得到 realloc() 无效的旧大小
- Realloc():即使使用malloc()分配内存,旧大小也无效
- 为什么在realloc之后字符串在内存中变得无效
- 无效的free() / delete / delete[] / realloc(), 4 字节在大小为 16 的块内分配
- C++realloc():无效指针
- 瓦尔格林德报告无效免费/删除/ realloc
- Realloc:无效的旧大小
- 赋值运算符中的 free() / delete / delete[] / realloc() 错误无效