Я смотрел на другие ответы подобной природы, но все же сталкивался с проблемами.Как изменить размер массива целых чисел?
Я новичок в C и вам нужен совет.
Соответствующие части кода:
int readNumbers(int **array, char* fname, int hexFlag) {
int numberRead = 0;
FILE* fp;
int counter = 0;
char arr[100];
char* ptr;
array = malloc(0 * sizeof(*array)); //Problematic area. Should I initially give it space?
fp = fopen(fname, "r");
if (fp == NULL) {
printf("Error opening file\n");
return -1;
}
while (fgets(arr, sizeof(arr), fp)) {
ptr = strtok(arr, " \n");
while(ptr) {
if (hexFlag == 0) {
array = realloc(array, (counter + 1) * sizeof(int*));
array[counter++] = strtol(ptr , NULL , 10); //Seg Faulting
} else {
array = realloc(array, (counter + 1) * sizeof(int*));
array[counter++] = strtol(ptr, NULL, 16);
}
++numberRead;
ptr = strtok(NULL , " \n");
}
}
Я отлажена это и кажется, что массив никогда не получает память, выделенную для него. Кроме того, сбой программы seg сразу после попытки доступа к массиву array[counter++]
;
Я также обнаружил, что это плохая практика повторного использования после каждого приращения, но я не знаю, что еще делать.
Здравствуйте, я остановился C несколько лет назад, но эта строка: массив = таНос (0 * SizeOf (* массив)); всегда будет выделять байты PointerSize. Ваш массив на самом деле указывает на указатели, поэтому * array - это просто указатель. Edit, btw: 0 * XX = 0, поэтому вы не выделяете какую-либо память – Jurion
Прочтите этот вопрос http://stackoverflow.com/questions/2937409/resizing-an-array-with-c! – Blackhat002
@ Blackhat002 Привет, я довольно подробно рассмотрел этот вопрос. Однако я, вероятно, пропустил важную деталь. Я пробовал всевозможные способы, но они либо имеют неверный указатель, либо ошибку сегментации. – Ansdai