Iは、各エントリは、文字列(つまり、私は、3dimensionalアレイを想定する)であり、C、で2dimensional配列をmallocしようとしているの各エントリは、文字列である2次元アレイ、、。私は多くを読んでおり、これは私の試みです。しかし、私はセグメンテーションフォルトを取得していると私は本当に何が間違っているか分からない。私は非常にプログラミングに新しいので、私は私のスタイルが良くない場合はお詫び申し上げます!のmalloc C
#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;
}
お返事をありがとうそんなに!これは本当に便利です。私は文字列の各文字にメモリを割り当てる必要があることを認識しました。 – user1163974