#include <stdio.h>
void assignDataBaseElement(char** str) {
scanf("%s",*str);
}
void main() {
char *dataBase[20];
for(int count = 1; count < 20 ; count++) {
assignDataBaseElement(&dataBase[count]);
printf("Database element %d : %s",count,dataBase[count]);
}
}
В этом примере dataBase
является массивом указателей char*
. В каждом выполнении цикла for
элемент dataBase
передается через указатели на функциональный assignDataBaseElement()
. Элемент передал, не инициализируется и не содержит допустимый адрес. Поэтому, когда элемент используется, чтобы сохранить строку от стандартного входа, проверка Non-initialized pointer возвращает красную ошибку.
Исправление — Инициализирует указатели char*
через calloc
Одно возможное исправление должно инициализировать каждый элемент dataBase
через функцию calloc()
прежде, чем передать его assignDataBaseElement()
. Инициализация через calloc()
позволяет указателям char
в dataBase
указывать на строки переменного размера.
#include <stdio.h>
#include <stdlib.h>
void assignDataBaseElement(char** str) {
scanf("%s",*str);
}
int inputSize();
void main() {
char *dataBase[20];
for(int count = 1; count < 20 ; count++) {
dataBase[count] = (char*)calloc(inputSize(),sizeof(char));
assignDataBaseElement(&dataBase[count]);
printf("Database element %d : %s",count,dataBase[count]);
}
}