在 C 中使用 realloc() 函数增加二维数组中的列
Using realloc() function in C for increasing column in 2D array
我有以下代码,它必须调整二维数组矩阵的一列的大小:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char * argv[]){
int n = 3;
int m = 4;
int * * mas = malloc(n * sizeof( * mas));
for (int i = 1; i < n + 1; i++) {
mas[i] = malloc(m * sizeof( * (mas[i])));
}
for (int i = 1; i < n + 1; i++) {
for (int j = 0; j < m; j++) {
mas[i][j] = i + 1;
printf("%d ", mas[i][j]);
}
printf("\n");
}
printf("\n");
当我调整矩阵列的大小时(但保留相同大小的行)它完成开始循环:
for (int i = 1; i < n + 1; i++) {
int * tmp = realloc(mas[i], (m + 1) * sizeof( * mas[i]));
if (tmp) {
mas[i] = tmp;
}
}
mas[1][4] = 100;
mas[2][4] = 200;
mas[3][4] = 300;
for (int i = 1; i < n + 1; i++) {
for (int j = 0; j < m + 1; j++) {
printf("%d ", mas[i][j]);
}
printf("\n");
}
for(int i = 1; i< n+1; i++){
free(mas[i]);
}
free(mas);
system("pause");
return 0;
}
I have:
2 2 2 2
3 3 3 3
4 4 4 4
打印此 myprg.exe 完成后
但是当我用简单的向量调整大小时它就完成了!
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char * argv[]) {
int n = 3;
int m = 4;
int* mas = malloc(n*sizeof(mas));
for(int i = 1; i < n+1; i++){
mas[i] = 0;
}
for(int i = 1; i < n+1; i++){
printf("%d\n", mas[i]);
}
mas = realloc(mas, (n+2)*sizeof(*mas));
for(int i = 1; i < n+3; i++){
mas[i] = 0;
}
for(int i = 1; i < n+3; i++){
printf("%d\n", mas[i]);
}
free(mas);
system("pause");
return 0;
}
我认为是二维数组的指针,但我不明白具体是什么:(
将代码中的每个 for (int i = 1; i < n + 1; i++)
替换为 for (int i = 0; i < n; i++)
。数组索引从 0
到 n-1
而不是 1
到 n
同样,改变
mas[1][4] = 100;
mas[2][4] = 200;
mas[3][4] = 300;
到
mas[0][4] = 100;
mas[1][4] = 200;
mas[2][4] = 300;
出于同样的原因。
最好同时检查那些 malloc
的 return 值,看看它们是否成功。此外,如果 realloc
失败并且 tmp
为 NULL
。
,您应该采取适当的措施
我有以下代码,它必须调整二维数组矩阵的一列的大小:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char * argv[]){
int n = 3;
int m = 4;
int * * mas = malloc(n * sizeof( * mas));
for (int i = 1; i < n + 1; i++) {
mas[i] = malloc(m * sizeof( * (mas[i])));
}
for (int i = 1; i < n + 1; i++) {
for (int j = 0; j < m; j++) {
mas[i][j] = i + 1;
printf("%d ", mas[i][j]);
}
printf("\n");
}
printf("\n");
当我调整矩阵列的大小时(但保留相同大小的行)它完成开始循环:
for (int i = 1; i < n + 1; i++) {
int * tmp = realloc(mas[i], (m + 1) * sizeof( * mas[i]));
if (tmp) {
mas[i] = tmp;
}
}
mas[1][4] = 100;
mas[2][4] = 200;
mas[3][4] = 300;
for (int i = 1; i < n + 1; i++) {
for (int j = 0; j < m + 1; j++) {
printf("%d ", mas[i][j]);
}
printf("\n");
}
for(int i = 1; i< n+1; i++){
free(mas[i]);
}
free(mas);
system("pause");
return 0;
}
I have:
2 2 2 2
3 3 3 3
4 4 4 4
打印此 myprg.exe 完成后
但是当我用简单的向量调整大小时它就完成了!
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char * argv[]) {
int n = 3;
int m = 4;
int* mas = malloc(n*sizeof(mas));
for(int i = 1; i < n+1; i++){
mas[i] = 0;
}
for(int i = 1; i < n+1; i++){
printf("%d\n", mas[i]);
}
mas = realloc(mas, (n+2)*sizeof(*mas));
for(int i = 1; i < n+3; i++){
mas[i] = 0;
}
for(int i = 1; i < n+3; i++){
printf("%d\n", mas[i]);
}
free(mas);
system("pause");
return 0;
}
我认为是二维数组的指针,但我不明白具体是什么:(
将代码中的每个 for (int i = 1; i < n + 1; i++)
替换为 for (int i = 0; i < n; i++)
。数组索引从 0
到 n-1
而不是 1
到 n
同样,改变
mas[1][4] = 100;
mas[2][4] = 200;
mas[3][4] = 300;
到
mas[0][4] = 100;
mas[1][4] = 200;
mas[2][4] = 300;
出于同样的原因。
最好同时检查那些 malloc
的 return 值,看看它们是否成功。此外,如果 realloc
失败并且 tmp
为 NULL
。