我已經有了編譯好的代碼,但是當我嘗試運行它時,出現了分段錯誤,我無法弄清楚什麼是錯誤的。我的分段錯誤在哪裏?
該計劃的重點是將不同尺寸和片段數量的碎片文件文件拼湊在一起。 片段被命名爲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警察會來敲門。 ;-)我在下面回答你的新問題。 –