[英]segmentation fault when writing to a char to a char array
我正在編寫代碼來處理二維字符數組。
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中,沒有向量。
是否有人對如何修改板子二維陣列有很好的建議? 謝謝。
問題是您要創建一個指針數組,並將指針ppint設置為字符串常量。 字符串常量的內存不可修改,因此對其進行寫入會導致分段錯誤。
將指針數組更改為2D字符數組將解決此問題
char board[][10] = {"aa", "bb"};
在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 );
在這種情況下,當不再需要數組時,您必須釋放分配的內存。
至於您遇到的分段錯誤,您正在嘗試更改字符串文字。 他們是一成不變的。 嘗試修改字符串文字會導致未定義的行為。
嘗試將板聲明為二維數組,即字符板[10] [10]
還要更改搜索功能聲明以將board用作2D數組,例如:
搜索(char board [] [],int x,int y){...
我認為您的代碼失敗了,因為您將指針數組與一個參數混合在一起,該參數期望指向char的指針。
問候
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.