我已经有了编译好的代码,但是当我尝试运行它时,出现了分段错误,我无法弄清楚什么是错误的。我的分段错误在哪里?
该计划的重点是将不同尺寸和片段数量的碎片文件文件拼凑在一起。 片段被命名为part_xx-YY,其中xx是从00到11和YY是从00到05
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
int width;
int height;
int xPieces;
int yPieces;
int xTens=0;
int xOnes=0;
int yTens=0;
int yOnes=0;
printf("Fragment width: ");
scanf("%d", &width);
printf("Fragment height: ");
scanf("%d", &height);
printf("Number of fragments on x axis: ");
scanf("%d", &xPieces);
printf("Number of fragments on y axis: ");
scanf("%d", &yPieces);
printf("wtf0");
char *line=malloc(sizeof(width) * sizeof(char));
printf("wtf1");
char array[xPieces][yPieces][height][width];
printf("wtf2");
char fileName[50];
printf("wtf3");
for(int x = 0; x<xPieces;)
{
printf("%d", x);
for(int y = 0; y<yPieces;)
{
printf("%d", y);
if(xOnes>=10)
{
xOnes=0;
xTens++;
}
if(yOnes>=10)
{
yOnes=0;
yTens++;
}
snprintf(fileName, sizeof fileName, "part_%i%i-%i%i", xTens, xOnes, yTens, yOnes);
FILE *file=fopen(fileName, "r");
char buffer[(width) * (height)];
fread(buffer, 1, (width) * (height), file);
for(int i = 0; i<height; i++)
{
printf("%d", i);
for(int j = 0; j<width; j++)
{
printf("%d", j);
array[x][y][i][j] = buffer[j + (i * (width))];
}
}
fclose(file);
y++;
yOnes++;
}
x++;
xOnes++;
}
FILE *newFile=fopen("newFile", "w");
for(int y = 0; y<yPieces; y++)
{
for(int i = 0; i<height; i++)
{
for(int x = 0; x<xPieces; x++)
{
for(int j = 0; j<width; j++)
{
fwrite(&array[x][y][i][j], 1, 1, newFile);
}
}
}
}
fclose(newFile);
free(line);
}
我想出如何使用调试器,并表示有什么错用fread() ,我想这是我的文件名阵列造成的,但我改变了一些东西,现在我在调试器得到的是这样的:
Program received signal SIGSEGV, Segmentation fault.
0x0018d68c in fread() from /lib/tls/i686/cmov/libc.so.6
我想也许FREAD()试图读入一个太小缓冲区,所以我增加了缓冲区到10000(这应该是戏剧性的过度杀伤力),但唉,无济于事。 我已经研究了很多,在这个问题上奋斗了几个小时,但仍然不知道如何从这里走得更远,因为我发现的类似问题对我来说没有多大意义,或者不相似足够。
我认为在这一点上我需要别人来看我的代码,所以任何帮助将不胜感激。
。
。
更新:我已经更新了我的代码有一些变化,现在我在这里得到一个分段错误,而不是:
Program received signal SIGSEGV, Segmentation fault.
0x08049058 in main() at innlev3.c:50
50 *array[x][y][i][j] = buffer[j + (i * (*width))];
我认为这部分是相当不错......我做了什么错了,在这里?
更新2:代码再次更新。我发现了一些我认为很奇怪的东西......在我的scanf工作之后,这些printf都没有... Aand我回到了旧的fread()细分故障。我想这是一件好事,我没有提出一个新的问题...:P
Program received signal SIGSEGV, Segmentation fault.
0x0018d68c in fread() from /lib/tls/i686/cmov/libc.so.6
(gdb) backtrace
#0 0x0018d68c in fread() from /lib/tls/i686/cmov/libc.so.6
#1 0x08048fc6 in main()
你应该问你的调试器这种类型的问题。 – 2012-11-12 02:13:03
我已经更新了一个新的分段错误。这是好的还是我应该提出一个新的问题? – Dzyu
我想说这足以让我成为一个单独的问题,但我怀疑Stack Overflow警察会来敲门。 ;-)我在下面回答你的新问题。 –