Я пытаюсь распределить 2-мерный массив в C, где каждая запись является строкой (так что, я полагаю, 3-мерный массив).Я много читал, и это моя попытка.Тем не менее, я получаю ошибку сегментации, и я действительно не уверен, что не так.Я довольно новичок в программировании, поэтому я прошу прощения, если мой стиль не хорош!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char *argv[])
{
double temp, int_check;
int gen, exit_flag=0, valid_input, valid, i, j;
char ***S;
printf("argc %d\n", argc);
if(argc < 2)
{
printf("Please enter command line arguments of the form: a R where a is the number of generators and R are relators\n");
exit_flag = 1;
}
else
{
valid = sscanf(argv[1], "%lg", &temp);
int_check = temp - (int)temp;
valid_input = ((valid != 0) && (valid != EOF)) && (int_check == 0) && (temp > 0);
if(!valid_input)
{
printf("Invalid input, the number of generators must be an integer > 0\n");
exit_flag = 1;
}
gen = (int)temp;
printf("Number of generators = %d\n", gen);
}
if(exit_flag==0)
{
S = (char***)malloc(2*sizeof(char**)); /*Defintes the grid to the size required*/
if(S == NULL)
{
printf("Cannot allocate memory for the S");
}
for(i=0; i<2; i++)
{
S[i] = (char**)malloc((argc-2)*sizeof(char*));
if(S[i] == NULL)
{
printf("Cannot allocate memory for the S");
}
} /*Grid finished being given the right size*/
for(i=2; i<argc; i++) /*Put the relators in the grid. Make rhs equal 1*/
{
strcpy(S[0][i-2], argv[i]);
strcpy(S[1][i-2], "1");
printf("relator %s\n", S[0][i-2]);
}
printf("The array S is\n");
for(j=0; j<(argc-2); j++)
{
for(i=0; i<2; i++)
{
printf(" %s ", S[i][j]);
}
printf("\n");
}
}
else /*If the inputs are invalid, exit the program*/
{
exit(EXIT_FAILURE);
}
for(i=0; i<2; i++)
{
free(S[i]);
}
free(S);
return 0;
}