Главное в этой функции всё нормально компилируется.
terminal::terminal ( )
{
index = 0;
for ( int i = 0; i < MAX_INODES; i++ ) {
file[i] = (inode *) calloc ( 1, sizeof ( inode ) );
file[i]->data = (char *) calloc ( i == 0 ? 4 : 0, sizeof ( char ) );
file[i]->size_data = i == 0 ? 4 : 0;
}
index = 0;
file[index]->inode = 0;
strncpy ( file[index]->name, "/\0", 2 );
file[index]->type = M_DIR;
file[index]->busy = BUSY;
current_inode = index;
}
А вот в этой уже не работает код, пишет эти ошибки.
terminal.cpp: In member function ‘void terminal::mkdir(char*)’:
terminal.cpp:29:19: error: base operand of ‘->’ is not a pointer
if ( file[index]->busy == UNBUSY ) break;
^~
terminal.cpp:36:32: error: base operand of ‘->’ is not a pointer
int size = file[current_inode]->size_data;
^~
terminal.cpp:39:21: error: base operand of ‘->’ is not a pointer
file[current_inode]->data = (char *) realloc ( file[current_inode]->data ,
^~
terminal.cpp:39:68: error: base operand of ‘->’ is not a pointer
file[current_inode]->data = (char *) realloc ( file[current_inode]->data ,
^~
terminal.cpp:42:31: error: base operand of ‘->’ is not a pointer
memcpy ( &file[current_inode]->data[size], index, length );
Хотя структура file никак не поменялась, вот функция.
void terminal::mkdir ( char *file )
{
int global_offset = current_inode;
/* найти свободный inode */
for ( index = 0; index < MAX_INODES; index++ ) {
if ( file[index]->busy == UNBUSY ) break;
}
if ( index == MAX_INODES ) {
fprintf ( stderr, "нет места.\n" );
return;
}
int size = file[current_inode]->size_data;
int length = sizeof ( int );
file[current_inode]->data = (char *) realloc ( file[current_inode]->data ,
size + length );
memcpy ( &file[current_inode]->data[size], index, length );
}
Вот terminal.h
#ifndef H_TERMINAL
#define H_TERMINAL
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define M_DIR 1
#define M_FILE 2
#define MAX_INODES 255
#define BUSY 1
#define UNBUSY 0
struct inode {
int inode;
char name[255];
int type;
int busy;
char *data;
int size_data;
};
typedef struct inode inode;
class terminal {
public:
terminal ( );
void mkdir ( char *file );
private:
inode *file[MAX_INODES];
int index;
int max;
int current_inode;
protected:
};
#endif
Вот main.
#include <stdio.h>
#include <iostream>
#include "terminal.h"
int main ( )
{
terminal *zex = new terminal ( );
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Дана последовательность из n словДля каждого элемента определить, сколько раз это слово встречалось в этой последовательности раньше ( на позициях...
Есть объект класса QSqlQuery queryВ query попадает результат некоторого запроса
Есть задача - реализовать двусвязный список(хранимые значения - целые числа) при помощи структурПри заполнении списка 10^7 значениями память...