вылет программы
Код:
memset(mass2, 0, sizeof(size));
ниже приведен полный код программы:
Код:
#include <stdlib.h>
#include <stdio.h>
int main()
{
char* fName;
FILE* pFile;
char* bufer;
int i=0;
int i_prew=0;//predidush'ee znacheniye i
int i_max=0;//dlya max dliny stroki
int i_max_final=0;//final max dlina stroki massiva
int nl=0, nw=0, flag=0;
char* endptr;
char* bseek;
int element, currow, curcol;
int j=0;
int l=0;
int osn_avt;
int q;
int m=0;
int size=0;
int ** mass2 = (int **)calloc(nl, sizeof(int*));
for(i = 0; i < nl; i++)
{mass2 = (int *)calloc(i_max_final, sizeof(int));}
if((fName=(char*)malloc(256))==NULL)
{
printf("\n!Error into malloc!\n");
return 0;
}
printf("Input name of file: "); scanf("%s", fName);
if((pFile=fopen(fName, "rt"))==NULL)
{
printf("\n!Error into the file name!\n");
free(fName);
return 0;
}
fseek(pFile, 0, SEEK_END);
if((bufer=(char*)malloc(ftell(pFile)+1))==NULL)
{
printf("\n!Error into malloc!\n");
fclose(pFile);
return 0;
}
fseek(pFile, 0, SEEK_SET);
while((bufer=getc(pFile))!=EOF) i++;
fclose(pFile);
i=0;
while(1)
{
if(bufer=='\n' || bufer==EOF)
{
nl++;
i_max=i-i_prew;
if(i_max>i_max_final)
{
i_max_final=i_max;//poluchaem max dlinu stroki
}
}
if(bufer==EOF) break;
if(bufer==' ' || bufer=='\n' || bufer=='\t') flag=0;
else if(flag==0)
{
flag=1;
nw++;
}
i++;
}
printf("Strok:\t%d\n Chisel v matritse:\t%d\n", nl, nw);
//-----------------------------first block ended
size=sizeof(int)*nl*i_max_final;
memset(mass2, 0, sizeof(size));
for(i=0;i<nl;i++)
{
for(j=0;j<i_max_final;j++)
{
printf("\t%d",mass2[j]);
}
printf("\n");}
bseek = bufer;
currow = curcol = 0;
while(1)
{
element = strtol(bseek, &endptr, 0);
if( endptr == bseek )
break; //parsing finished
mass2[currow][curcol++]=element;
//put_element_to_matrix(element, currow, curcol++);
if(*endptr == '\0')
break; //parsing finished
if( *endptr == '\n' || *endptr == '\r' )
currow=currow+1;
bseek = endptr + 1;
}
free(bufer);
for(i=0;i<nl;i++)
{
for(j=0;j<i_max_final;j++)
{
printf("\t%d",mass2[j]);
}
printf("\n");
}
//----------------------------------------second block ended
}
#include <stdio.h>
int main()
{
char* fName;
FILE* pFile;
char* bufer;
int i=0;
int i_prew=0;//predidush'ee znacheniye i
int i_max=0;//dlya max dliny stroki
int i_max_final=0;//final max dlina stroki massiva
int nl=0, nw=0, flag=0;
char* endptr;
char* bseek;
int element, currow, curcol;
int j=0;
int l=0;
int osn_avt;
int q;
int m=0;
int size=0;
int ** mass2 = (int **)calloc(nl, sizeof(int*));
for(i = 0; i < nl; i++)
{mass2 = (int *)calloc(i_max_final, sizeof(int));}
if((fName=(char*)malloc(256))==NULL)
{
printf("\n!Error into malloc!\n");
return 0;
}
printf("Input name of file: "); scanf("%s", fName);
if((pFile=fopen(fName, "rt"))==NULL)
{
printf("\n!Error into the file name!\n");
free(fName);
return 0;
}
fseek(pFile, 0, SEEK_END);
if((bufer=(char*)malloc(ftell(pFile)+1))==NULL)
{
printf("\n!Error into malloc!\n");
fclose(pFile);
return 0;
}
fseek(pFile, 0, SEEK_SET);
while((bufer=getc(pFile))!=EOF) i++;
fclose(pFile);
i=0;
while(1)
{
if(bufer=='\n' || bufer==EOF)
{
nl++;
i_max=i-i_prew;
if(i_max>i_max_final)
{
i_max_final=i_max;//poluchaem max dlinu stroki
}
}
if(bufer==EOF) break;
if(bufer==' ' || bufer=='\n' || bufer=='\t') flag=0;
else if(flag==0)
{
flag=1;
nw++;
}
i++;
}
printf("Strok:\t%d\n Chisel v matritse:\t%d\n", nl, nw);
//-----------------------------first block ended
size=sizeof(int)*nl*i_max_final;
memset(mass2, 0, sizeof(size));
for(i=0;i<nl;i++)
{
for(j=0;j<i_max_final;j++)
{
printf("\t%d",mass2[j]);
}
printf("\n");}
bseek = bufer;
currow = curcol = 0;
while(1)
{
element = strtol(bseek, &endptr, 0);
if( endptr == bseek )
break; //parsing finished
mass2[currow][curcol++]=element;
//put_element_to_matrix(element, currow, curcol++);
if(*endptr == '\0')
break; //parsing finished
if( *endptr == '\n' || *endptr == '\r' )
currow=currow+1;
bseek = endptr + 1;
}
free(bufer);
for(i=0;i<nl;i++)
{
for(j=0;j<i_max_final;j++)
{
printf("\t%d",mass2[j]);
}
printf("\n");
}
//----------------------------------------second block ended
}
заранее спасибо.
Код:
memset(mass2, 0, size);
Но, ни в этом дело. Ты с выделениями памяти намудрил.
Код:
#include <stdlib.h>
#include <stdio.h>
int main()
{
char* fName;
FILE* pFile;
char* bufer;
int i=0;
int i_prew=0;//predidush'ee znacheniye i
int i_max=0;//dlya max dliny stroki
int i_max_final=0;//final max dlina stroki massiva
int nl=0, nw=0, flag=0;
char* endptr;
char* bseek;
int element, currow, curcol;
int j=0;
int l=0;
int osn_avt;
int q;
int m=0;
int size=0;
int *mass2;
mass2=(int*)malloc(nl*i_max_final*sizeof(int));
/*int ** mass2 = (int **)calloc(nl, sizeof(int*));
for(i = 0; i < nl; i++)
{mass2 = (int *)calloc(i_max_final, sizeof(int));}*/
if((fName=(char*)malloc(256))==NULL)
{
printf("\n!Error into malloc!\n");
return 0;
}
printf("Input name of file: "); scanf("%s", fName);
if((pFile=fopen(fName, "rt"))==NULL)
{
printf("\n!Error into the file name!\n");
free(fName);
return 0;
}
fseek(pFile, 0, SEEK_END);
if((bufer=(char*)malloc(ftell(pFile)+1))==NULL)
{
printf("\n!Error into malloc!\n");
fclose(pFile);
return 0;
}
fseek(pFile, 0, SEEK_SET);
while((bufer=getc(pFile))!=EOF) i++;
fclose(pFile);
i=0;
while(1)
{
if(bufer=='\n' || bufer==EOF)
{
nl++;
}
if(bufer==EOF) break;
if(bufer==' ' || bufer=='\n' || bufer=='\t') flag=0;
else if(flag==0)
{
flag=1;
nw++;
}
i++;
}
i=0;
while(1)
{
if(bufer=='\n')
{
i_max=i-i_prew;
i_prew=i;
if(i_max>i_max_final)
{
i_max_final=i_max;//poluchaem max dlinu stroki
}
}
if(bufer==EOF) break;
i++;
printf("\n%d",i_max_final);
}
printf("Strok:\t%d\n Chisel v matritse:\t%d\n", nl, nw);
//-----------------------------first block ended
size=sizeof(int)*nl*i_max_final;
memset(mass2, 0, sizeof(size));
for(i=0;i<nl;i++)
{
for(j=0;j<i_max_final;j++)
{
printf("\t%d",mass2[i*i_max_final+j]);
}
printf("\n");}
printf("\n");
printf("\n");
bseek = bufer;
currow = curcol = 0;
while(1)
{
element = strtol(bseek, &endptr, 0);
if( endptr == bseek )
break; //parsing finished
mass2[currow*i_max_final+curcol+1]=element;
//put_element_to_matrix(element, currow, curcol++);
if(*endptr == '\0')
break; //parsing finished
if( *endptr == '\n' || *endptr == '\r' )
currow=currow+1;
bseek = endptr + 1;
}
free(bufer);
for(i=0;i<nl;i++)
{
for(j=0;j<i_max_final;j++)
{
printf("\t%d",mass2[i*i_max_final+j]);
}
printf("\n");
}
//----------------------------------------second block ended
}
#include <stdio.h>
int main()
{
char* fName;
FILE* pFile;
char* bufer;
int i=0;
int i_prew=0;//predidush'ee znacheniye i
int i_max=0;//dlya max dliny stroki
int i_max_final=0;//final max dlina stroki massiva
int nl=0, nw=0, flag=0;
char* endptr;
char* bseek;
int element, currow, curcol;
int j=0;
int l=0;
int osn_avt;
int q;
int m=0;
int size=0;
int *mass2;
mass2=(int*)malloc(nl*i_max_final*sizeof(int));
/*int ** mass2 = (int **)calloc(nl, sizeof(int*));
for(i = 0; i < nl; i++)
{mass2 = (int *)calloc(i_max_final, sizeof(int));}*/
if((fName=(char*)malloc(256))==NULL)
{
printf("\n!Error into malloc!\n");
return 0;
}
printf("Input name of file: "); scanf("%s", fName);
if((pFile=fopen(fName, "rt"))==NULL)
{
printf("\n!Error into the file name!\n");
free(fName);
return 0;
}
fseek(pFile, 0, SEEK_END);
if((bufer=(char*)malloc(ftell(pFile)+1))==NULL)
{
printf("\n!Error into malloc!\n");
fclose(pFile);
return 0;
}
fseek(pFile, 0, SEEK_SET);
while((bufer=getc(pFile))!=EOF) i++;
fclose(pFile);
i=0;
while(1)
{
if(bufer=='\n' || bufer==EOF)
{
nl++;
}
if(bufer==EOF) break;
if(bufer==' ' || bufer=='\n' || bufer=='\t') flag=0;
else if(flag==0)
{
flag=1;
nw++;
}
i++;
}
i=0;
while(1)
{
if(bufer=='\n')
{
i_max=i-i_prew;
i_prew=i;
if(i_max>i_max_final)
{
i_max_final=i_max;//poluchaem max dlinu stroki
}
}
if(bufer==EOF) break;
i++;
printf("\n%d",i_max_final);
}
printf("Strok:\t%d\n Chisel v matritse:\t%d\n", nl, nw);
//-----------------------------first block ended
size=sizeof(int)*nl*i_max_final;
memset(mass2, 0, sizeof(size));
for(i=0;i<nl;i++)
{
for(j=0;j<i_max_final;j++)
{
printf("\t%d",mass2[i*i_max_final+j]);
}
printf("\n");}
printf("\n");
printf("\n");
bseek = bufer;
currow = curcol = 0;
while(1)
{
element = strtol(bseek, &endptr, 0);
if( endptr == bseek )
break; //parsing finished
mass2[currow*i_max_final+curcol+1]=element;
//put_element_to_matrix(element, currow, curcol++);
if(*endptr == '\0')
break; //parsing finished
if( *endptr == '\n' || *endptr == '\r' )
currow=currow+1;
bseek = endptr + 1;
}
free(bufer);
for(i=0;i<nl;i++)
{
for(j=0;j<i_max_final;j++)
{
printf("\t%d",mass2[i*i_max_final+j]);
}
printf("\n");
}
//----------------------------------------second block ended
}
Код:
int i_max_final=0;//final max dlina stroki massiva
int nl=0, nw=0, flag=0;
...
int *mass2;
mass2=(int*)malloc(nl*i_max_final*sizeof(int));
int nl=0, nw=0, flag=0;
...
int *mass2;
mass2=(int*)malloc(nl*i_max_final*sizeof(int));
как вы думаете, сколько байт выделит malloc, если перемножить: 0 * 0 * 4 = ???
http://www.uchi-it.ru/7/9/10.html я думаю примерно так. ввиду того,что массив индексируется и выводится после memsetосновная проблема возникает при запуске функции strtol
Цитата: PupSeeK
http://www.uchi-it.ru/7/9/10.html я думаю примерно так. ввиду того,что массив индексируется и выводится после memset основная проблема возникает при запуске функции strtol
Ну, что же. Ваша воля.
Я умываю руки. /(с) Понтий Пилат