Ai đó có thể khôn ngoan hơn tôi vui lòng giải thích cho tôi tại sao đoạn mã sau bị lỗi? Không có vấn đề phân bổ bộ nhớ bằng cách tham chiếu, nhưng ngay sau khi tôi cố gắng gán bất cứ điều gì hoặc miễn phí bằng cách tham chiếu, segfault xảy ra.Phân bổ mảng động 2D và tham chiếu bằng tham chiếu trong C
Tôi chắc chắn rằng tôi đang thiếu một số khái niệm cơ bản về con trỏ và đi qua tham chiếu, hy vọng một số ánh sáng có thể được đổ.
#include <stdlib.h>
#include <stdio.h>
void allocateMatrix(float ***);
void fillMatrix(float ***);
void freeMatrix(float **);
int main() {
float **matrix;
allocateMatrix(&matrix); // this function calls and returns OK
fillMatrix(&matrix); // this function will segfault
freeMatrix(matrix); // this function will segfault
exit(0);
}
void allocateMatrix(float ***m) {
int i;
m = malloc(2*sizeof(float*));
for (i = 0; i < 2; i++) {
m[i] = malloc(2*sizeof(float));
}
return;
}
void fillMatrix(float ***m) {
int i,j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
(*m)[i][j] = 1.0; // SEGFAULT
}
}
return;
}
void freeMatrix(float **m) {
int i;
for (i = 0; i < 2; i++) {
free(m[i]); // SEGFAULT
}
free(m);
return;
}
Tôi thực sự hơi ngạc nhiên khi biên dịch. "void allocateMatrix (& m)" có khả năng không nhập m dưới dạng float ** như mong đợi. Ngoài ra, không có tài liệu tham khảo trong C trong cùng một cách mà có trong C + +. – Corbin
tại sao chữ ký cho 'freeMatrix' vv khác nhau khi khai báo và xác định? – keety
keety, Corbin: xin lỗi sao chép dán thất bại, cố định nó – holocron