I am having trouble trying to figure out where my segmentation faults are coming from. I have narrowed it down to the function and snippet of code but I'm stumped. Mind taking a look at it?
P.S. I ask that you guys dont be too harsh on the negative votes. I am a student and im teaching myself plain c as I go. Not to mention im manipulating strings which is a pain in c so I understand my code looks like crap. But give me a break. That's why I'm here to learn.
Anyway let me know what else you need and thanks in advance.
Here is the console output.
rpf0024@cse02:~/cse2610$ gcc -std=gnu99 main.c rpf0024@cse02:~/cse2610$ ./a.out # A demonstration of some simple MIPS instructions Loop: sll $t1, $s3, add $t1, $t1, $s6 lw $t0, 0($t1) bne $t0, $s5, Exit addi $s3, $s3, 1 j Loop Exit: Line: 0 # Line: 1 Line: 2 Loop Line: 3 add Line: 4 lw Line: 5 bne Line: 6 addi Line: 7 j Line: 8 Exit WompWompWompSplitting string: add $t1 $t1 $s6 Segmentation fault (core dumped) rpf0024@cse02:~/cse2610$
Assem.c - I have verified the segmentation faults are somewhere within my batch of "if" statements. I deleted that whole block of code and my program ran just fine.
int checkRformat(char *LineArray, struct assem item)
{
int i = 0;
char *str;
char *temp;
item.opcode = NULL;
item.shamt = NULL;
item.funct = NULL;
item.rs = NULL;
item.rt = NULL;
item.rd = NULL;
printf("Splitting string:\n");
temp = strdup(LineArray);
str = strtok(temp, " ,.-#\n\t");
//this helper function gets called by another.It primarily serves to convert the MIPS code
//instructions or labels into their binary values. These global variables will then concatenated
// and be printed onto a .txt file.
while(str != NULL)
{
printf("%s\n", str);
str = strtok(NULL, " ,.-#\n\t");
if(strcmp(str, "add"))
{
item.opcode = "000000";
item.shamt = "00000";
item.funct = "10100";
}
else if(strcmp(str, "$t0"))
{
if(strcmp(item.rs, NULL)){item.rs = "01000";}
else if(item.rt, NULL){item.rt = "01000";}
else if(item.rd,NULL){item.rd = "01000";}
}
else if(strcmp(str, "$t1"))
{
if(strcmp(item.rs,NULL)){item.rs = "01001";}
else if(item.rt,NULL){item.rt = "01001";}
else if(item.rd,NULL){item.rd = "01001";}
}
else if(strcmp(str, "$s6"))
{
if(strcmp(item.rs,NULL)){item.rs = "11110";}
else if(item.rt,NULL){item.rt = "11110";}
else if(item.rd,NULL){item.rd = "11110";}
}
}
}
assem.h
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
struct assem
{
char myString[101]; //buffer
char *myLines[20]; //this will store the lines from a text file..up to 20 lines
char *myLines2[20];
char *myWord[20]; //this stores the 1st words individually.
char *opcode;
char *rs;
char *rt;
char *rd;
char *shamt;
char *funct;
char counter; //counter for number of lines
//printing stuff...prints file directly from whats STORED IN THE ARRAY
};
int readFile(FILE *FileToBeRead, struct assem *item); //takes in the file that needs to be read and splits it into lines
int firstCheck(struct assem item);
int secondCheck(struct assem item);
int checkRformat(char *LineArray, struct assem item);
int checkFormat1(char *LineArray,struct assem item, int offset);
int checkFormat2(char *LineArray, struct assem item, int offset);
int checkFormat3(char *LineArray, struct assem item, int offset);
int checkFormat4(char *LineArray, struct assem item, int offset);
int checkFormat5(char *LineArray, struct assem item, int offset);
int checkFormat6(char *LineArray, struct assem item);
int checkFormat7(char *LineArray, struct assem item);
int checkLabel1(char *Array, struct assem item);
int checkLabel2(char *Array, struct assem item);
int checkLabel3(char *Array, struct assem item);
//int checkSyntax1(char *LineArray, struct assem item);
void removeSpaces(char* str_trimmed, const char* str_untrimmed, struct assem *item); //HELPER FUNCTIONS TO REMOVE SPACES
void ReadWords(struct assem *item); //stores the first word of each line in an array for evaluation
void printFile(struct assem item); //prints some stuff
void printWords(struct assem item); //checks the first character if its instruction, label, or comment
Aucun commentaire:
Enregistrer un commentaire