我正在嘗試使用函式初始化一個陣列,但我覺得它有些不對勁。當我編譯它時,我得到了分段錯誤,但不確定在哪里。有人可以指出我出錯的正確方向。我的意思是如果有更好的方法可以隨時發表評論。謝謝你。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void initialize(int ** arr, int row, int col)
{
int i;
arr = (int **) malloc(sizeof(int *) *col);
for(i = 0; i < row; i )
{
arr[i] = (int *) malloc(sizeof(int) * row);
}
}
void freeArray(int ** arr)
{
free(arr);
}
int main()
{
int **arr;
int r, c;
initialize(arr, 3,6);
for(r = 0; r <= 3; r )
{
for(c = 0; c <= 6; c )
{
printf("%d ", arr[r][c] = r*c);
}
printf("\n");
}
freeArray(arr);
}
uj5u.com熱心網友回復:
對于初學者,該功能有一個錯誤。
void initialize(int ** arr, int row, int col)
{
int i;
arr = (int **) malloc(sizeof(int *) *col);
for(i = 0; i < row; i )
{
arr[i] = (int *) malloc(sizeof(int) * row);
}
}
col而不是在此陳述句中使用變數
arr = (int **) malloc(sizeof(int *) *col);
你必須使用變數row
arr = (int **) malloc(sizeof(int *) *row);
而在這個陳述句中,而不是使用變數row
arr[i] = (int *) malloc(sizeof(int) * row);
你必須使用變數col
arr[i] = (int *) malloc(sizeof(int) * col);
至于主要問題,該函式接受 main 按值宣告的指標。這意味著該函式處理指標的副本。副本的更改不會反映在原始指標上。
您需要通過指向函式的指標(通過參考傳遞)間接將指標傳遞給函式,例如
void initialize(int *** arr, int row, int col)
{
int i;
*arr = (int **) malloc(sizeof(int *) *row);
for(i = 0; i < row; i )
{
( *arr )[i] = (int *) malloc(sizeof(int) * col);
}
}
并且該函式被稱為
initialize( &arr, 3,6);
或者當函式分配陣列并回傳指向陣列的指標時更好
int ** initialize( int row, int col)
{
int **arr;
arr = (int **) malloc(sizeof(int *) *row);
for( int i = 0; i < row; i )
{
arr[i] = (int *) malloc(sizeof(int) * col);
}
return arr;
}
并且該函式被稱為
int **arr = initialize( 3, 6 );
同樣在 main 的嵌套 for 回圈中,使用了無效條件
for(r = 0; r <= 3; r )
{
for(c = 0; c <= 6; c )
{
printf("%d ", arr[r][c] = r*c);
}
printf("\n");
}
你必須寫
for(r = 0; r < 3; r )
{
for(c = 0; c < 6; c )
{
printf("%d ", arr[r][c] = r*c);
}
printf("\n");
}
此外,該函式freeArray必須以下列方式宣告和定義
void freeArray(int ** arr, int row)
{
if ( arr != NULL )
{
for ( int i = 0; i < row; i )
{
free( arr[i] );
}
}
free( arr );
}
并稱為
freeArray(arr, 3);
請注意,通常在使用指向動態分配記憶體的指標之前,您需要檢查記憶體是否已成功分配。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/462115.html
上一篇:fwrite函式錯誤寫入資料
