我正在尝试将指针传递给指向程序的指针,但我每次都会得到一个段错误,而将它传递给函数则完全正常。 我想这可能与强制C在数组上自动执行指针有关,例如在这个问题中: passing a pointer to a pointer in C。
但我不知道如何解决它。
以下是代码:
#include <stdio.h>
#include <stdlib.h>
void creer_matrice(int nbCol, int nbLigne, char **matrice)
{
int i,j;
matrice = calloc( nbCol, sizeof(char*));
if( matrice == NULL ){
printf("Allocation impossible");
exit(EXIT_FAILURE);
}
for( i = 0 ; i < nbLigne ; i++ ){
matrice[i] = calloc (nbCol, sizeof(char*));
if( matrice[i] == NULL ){
printf("Allocation impossible");
exit(EXIT_FAILURE);
}
}
/* Remplissage de test*/
for(i = 0; i < nbLigne; i++){
for(j = 0; j < nbCol; j++){
matrice[i][j] = 'I';
}
}
//return matrice;
}
int main(){
int i,j;
char **matrice;
creer_matrice(8,6,matrice);
//matrice = creer_matrice(8,6);
for(i = 0; i < 6; i++){
for(j = 0; j < 8; j++){
printf("%c ",matrice[i][j]);
}
printf("\n");
}
}
有人可以告诉我我错在哪里以及如何解决它?
答案 0 :(得分:0)
matrice = calloc( nbCol, sizeof(char*));
这里你没有为矩阵分配足够的内存。您需要根据矩阵的大小和存储在其中的类型来分配内存:
matrice = calloc(nbCol * nbLigne, sizeof(int));
并删除
matrice[i] = calloc (nbCol, sizeof(char*));
尝试尽可能减少系统调用。如果您可以在一次调用中分配所有矩阵,请执行此操作。您已经知道在函数开始时要分配的确切大小。
一旦完成,不要忘记释放已分配的内存。
free(matrice);
答案 1 :(得分:0)
更改此行:
for( i = 0 ; i < nbLigne ; i++ ){
matrice[i] = calloc (nbCol, sizeof(char*));
要:
for( i = 0 ; i < nbCol ; i++ ){
matrice[i] = calloc (nbLinge, sizeof(char));
或更好的事件:在一个语句中为整个矩阵分配内存。