簡體   English   中英

將字符寫入char數組時出現分段錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM