Я пытаюсь написать программу-компилятор в C (Ubuntu, gcc) с помощью учебника Джека Креншоу http://compilers.iecc.com/crenshaw/. Однако его написано на Паскале, и я относительно новичок в C, поэтому я попытался написать его как можно лучше.C - ошибка сегментации сегментации программы
Мне нужна помощь. A Ошибка сегментации. См. Вывод Valgrind:
==3525== Invalid read of size 1
==3525== at 0x80484C0: GetChar (in /home/spandan/codes/Compiler_1)
==3525== by 0x8048AAD: Init (in /home/spandan/codes/Compiler_1)
==3525== by 0x8048ACD: main (in /home/spandan/codes/Compiler_1)
==3525== Address 0x0 is not stack'd, malloc'd or (recently) free'd
==3525==
==3525==
==3525== Process terminating with default action of signal 11 (SIGSEGV)
==3525== Access not within mapped region at address 0x0
==3525== at 0x80484C0: GetChar (in /home/spandan/codes/Compiler_1)
==3525== by 0x8048AAD: Init (in /home/spandan/codes/Compiler_1)
==3525== by 0x8048ACD: main (in /home/spandan/codes/Compiler_1)
Я отправлю часть кода, относящуюся к следствию стека Valgrind. Остальное можно найти по адресу: http://pastebin.com/KBHyRC1n.
Пожалуйста, помогите с объяснением. По моим словам, все указатели правильно используются. Я хочу предоставить ввод командной строки для этой программы, но даже если я этого не сделаю, она по-прежнему сохраняется.
#include<stdio.h>
#include<stdlib.h>
static char *Look;
static int LookP = 0;
//read new character from input stream
char GetChar(){
char x;
x= Look[LookP];
LookP++;
return x;
}
// initializer function
void Init(char *c){
Look=c;
GetChar();
//SkipWhite();
}
int main(int argc, char *argv){
Init(argv[1]);
//Assignment();
if (Look[LookP] != '\r'){
// Expected('Newline');
}
return 0;
}
Вы должны получить компилятор предупреждение о вызове 'Init'. Он ожидает 'char *', но 'argv [1]' является просто 'char'. – Barmar
Вы также должны сообщить нам, как вы вызываете свою программу, особенно параметры командной строки. –
@MichaelWalz У меня даже нет времени для ввода параметров командной строки. В окнах всплывающая консоль закрывается, прежде чем я могу, в linux это не имеет значения, я даю или не добавляю никаких параметров, это говорит о «ошибке сегментации, ядре сбрасывается». – Spandan