将char写入char数组时出现分段错误

时间:2015-08-16 22:33:06

标签: c arrays

我正在编写一个代码来处理二维char数组。

char *board[] = {"aa"};

我将数组传递给函数

 search(board, row, col);
 ..........
 bool search(char** boards, int row, int col)
 {
      // Inside the function, I want to modify the boards[x][y] 
      // from the board within x and y, x < row, y < col
      // I get the segmentation fault here because the boards is 
      // allocated to the static memory and cannot be changed.
      boards[x][y] = 'c';
 }

在C ++中,我可以使用

 vector< vector<char> boards

更改特定位置的元素。 但在C中,没有向量。

有人对如何修改电路板2-D阵列有很好的建议吗? 谢谢。

3 个答案:

答案 0 :(得分:4)

问题是你正在创建一个指针数组,并将指向ppint的指针设置为字符串常量。字符串常量的内存不可修改,因此写入它会导致分段错误。

将指针数组更改为2D字符数组将解决此问题

char board[][10] = {"aa", "bb"};

答案 1 :(得分:1)

在C中,如果编译器支持变量长度数组,则可以使用它们。

例如

int size_t m = 2;
int size_t n = 3;
char board[m][n] = { "aa", "bb" };

search( m, n, board );

// Add more search code here...

bool search( size_t rows, size_t cols,  char board[][cols] );

另一种方法是使用指针数组,其中每个指针指向动态分配的数组,或者数组本身可以动态分配。例如

int size_t m = 2;
int size_t n = 3;

char **board;

board = malloc( m * sizeof( char * ) );
for ( size_t i = 0; i < m; i++ ) board[i] = malloc( n * sizeof( char ) );
strcpy( board[0], "aa" );
strcpy( board[1], "bb" );

search( board, m, n );

//,,,

bool search( char **board, size_t rows, size_t cols );

在这种情况下,当不再需要数组时,你必须释放分配的内存。

至于您获得的分段错误,那么您正在尝试更改字符串文字。他们是不变的。任何修改字符串文字的尝试都会导致未定义的行为。

答案 2 :(得分:0)

尝试将板声明为2D阵列, char board [10] [10]

同时更改搜索功能声明以将board用作2D数组,如:

搜索(char board [] [],int x,int y){...

我认为您的代码失败了,因为您将指针数组与一个期望指针指向char的参数混合在一起。

问候