gpt4 book ai didi

c - 结构和函数的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 06:28:08 25 4
gpt4 key购买 nike


我在查找和解决可怕的段错误问题时遇到了一些困难。我创建了一个带有数组的“结构”并填充了随机字符。从那里我正在计算水平和垂直对。
在我运行 function3() 之前,一切似乎都很好。从那里出现段错误。我运行 GDB 来查找错误,但我不知道为什么它不起作用,因为我已经为 function2() 完成了类似的功能,并且该功能没问题。我不确定我是否缺少指针。我玩过添加和减去指针但没有运气。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ROW 12
#define COL 15

typedef struct letter_array {
char** letters;
struct letter_array *ltr_ptr;
} larray;

void function1 (larray * letter1);
int function2 (larray * letter2);
int function3 (larray * letter3);
void function4 (int hor_ans, int ver_ans);

int main ( void )
{

larray letter_list;
int vert, hori, count;

letter_list.letters = malloc(ROW*sizeof(int*));
for(count = 0; count<ROW; count++)
{
letter_list.letters [count] = malloc(COL*sizeof(int));
}

printf("\n \t\t\t *** Hello! ***");

printf("\n This program will create a random selection of 180 upper-case"
" characters. \n\n");

function1(&letter_list);

hori = function2(&letter_list);

vert = function3(&letter_list); //The Problem?

free(letter_list.letters);

return ( 0 ) ;
}


void function1 (larray *letter1) // Assign random letters to array.
{
int i, z;

srandom((unsigned)time(NULL));

for(i=0; i<ROW; i++)
{
for(z=0; z<COL; z++)
{
letter1->letters[i][z] = random( )%26+'A';
printf("%c ", letter1->letters[i][z]);
}
printf("\n");
}

return ;
}

int function2 (larray * letter2) //Count horizontal pairs.
{
int a,b;
int m=0;
for(a=0; a<ROW; a++)
{
for(b=0; b<COL; b++)
{
if (letter2->letters[a][b] == (letter2->letters[a][b+1]))
m++;
}
}

return (m);
}


int function3 (larray * letter3) //Count vertical pairs.
{
int a,b;
int n=0;
for (a=0; a<ROW; a++)
{
for(b=0; b<COL; b++)
{
if (letter3->letters[a][b] == (letter3->letters[a+1][b])) //THE Problem..?
n++;
}
}
return (n);

在 GDB 中...

Program received signal SIGSEGV, Segmentation fault.
0x0000000000400ad8 in function3 (letter3=0x7fffffffd8a0)
xxx if (letter3->letters[a][b] == (letter3->letters[a+1][b]))
(gdb) backtrace
#0 0x0000000000400ad8 in function3 (letter3=0x7fffffffd8a0)
#1 0x000000000040088f in main ()
(gdb) up
#1 0x000000000040088f in main ()
xxx vert = function3(&letter_list);

感谢您的帮助!

最佳答案

这很明显。 GDB 会告诉您确切的查找位置。在你的 function3 中你做

for (a=0; a<ROW; a++)

然后你尝试访问

letter3->letters[a+1][b]

此处,a+1 导致段错误(您超出了数组的边缘)。

关于c - 结构和函数的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23555608/

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