gpt4 book ai didi

c - 我的段错误在哪里?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:00 24 4
gpt4 key购买 nike

<分区>

我的代码编译得很好,但是当我尝试运行它时,我遇到了一个段错误,我无法找出问题所在。

该程序的重​​点是拼凑不同尺寸和片段数量的片段 ascii 艺术文件的文本。这些片段被命名为 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() 有问题,我认为这是由我的 fileName 数组引起的,但我更改了一些东西,现在我从调试器得到的就是这个:

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 都没有……我又回到了旧的 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 ()

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com