【发布时间】:2019-01-11 13:16:07
【问题描述】:
我参考下面的网址练习二维动态数组: https://thispointer.com/allocating-and-deallocating-2d-arrays-dynamically-in-c-and-c/
我的代码:
#include <stdio.h>
#include <stdlib.h>
int** create_2d_arr(int row_size,int colum_size)
{
int** array = (int**)malloc(sizeof(int*)*row_size);
for (int i = 0; i < row_size; i++)
array[i] = (int*)malloc(sizeof(int)*colum_size);
return array;
}
void free_2d_arr(int** matrix,int row_size, int colum_size) {
for (int i = 0; i < row_size; i++) {
free(matrix[i]);
}
free(matrix);
}
int main(int argc, char const *argv[])
{
int row=3,cloum=2;
int** arr_2d = create_2d_arr(row,cloum);
arr_2d[0,0]=4;
arr_2d[0,1]=5;
arr_2d[1,0]=6;
arr_2d[1,1]=7;
arr_2d[2,0]=8;
arr_2d[2,1]=9;
for(int i=0;i<row;i++)
for(int j=0;j<cloum;j++)
printf("arr_2d[%d,%d] = %d \n",i,j,arr_2d[i,j]);
free_2d_arr(arr_2d,row,cloum);
return 0;
}
但是编译后执行时出现错误:
arr_2d[0,0] = 8
arr_2d[0,1] = 9
arr_2d[1,0] = 8
arr_2d[1,1] = 9
arr_2d[2,0] = 8
arr_2d[2,1] = 9
[1] 9300 segmentation fault (core dumped) ./t
只有 arr_2d[2,0]=8 arr_2d[2,1]=9 是正确的。 我不明白我的代码哪里错了。 有人帮我吗?
续订
感谢您的回复。
但是在我将arr_2d[2,0]=8 修改为rr_2d[2][0]=8 之后...
result of printf is
arr_2d[0][0] = -267545984
arr_2d[0][1] = -267545952
arr_2d[1][0] = -267545984
...
编译器警告
t.c:38:47: warning: expression result unused [-Wunused-value]
printf("arr_2d[%d,%d] = %d \n",i,j,arr_2d[i,j]);
^
t.c:38:40: warning: format specifies type 'int' but the argument has type
'int *' [-Wformat]
printf("arr_2d[%d,%d] = %d \n",i,j,arr_2d[i,j]);
~~ ^~~~~~~~~~~
2 warnings generated.
我的编译器是clang,即使我使用gcc
=========
已解决
修改后:
printf("arr_2d[%d,%d] = %d \n",i,j,arr_2d[i,j]);
=>
printf("arr_2d[%d,%d] = %d \n",i,j,arr_2d[i],[j]);
正常工作。 非常感谢大家。
【问题讨论】:
-
arr_2d[0,0]=4;->arr_2d[0][0]=4; -
您的编译器针对此代码向您发出了多少编译器警告?
-
我怀疑你没有在
printf中更改它。 -
您是否使用标志 -Wall 来打开额外的警告。我会建议。
-
嗨,Osiris,感谢您的提示。它工作正常。