【发布时间】:2012-12-03 21:49:15
【问题描述】:
尝试将指向结构的指针的包含内容复制到另一个指针时出现分段错误。
我的结构:
typedef struct State {
char alphabets[2][6];
struct State *PREV; /*this points to the previous state it came from*/
struct State *NEXT; /*this points to the next state in the linked list*/
int cost; /*Number of moves done to get to this position*/
int zero_index;/*this holds the index to the empty postion*/
char *move[2];/*this holds the move that was done to get to this state*/
} State;
内存分配方式:
State *memAllocator() {
State *p = (State*)malloc(sizeof(State));
if (p == NULL) {
printf("Malloc for a new position failed");
exit(1);
}
return p;
}
这是我的结构字母的示例
CANAMA
PANAL_
我有一个随机函数,它给了我两个可能的状态移动。上述状态的两个动作将是
CANAM_
PANALA
AND
CANAMA
PANA_L
在我的随机状态函数中,我复制当前状态的包含,然后将其置于新状态。
但这就是问题所在,我正在进行广度优先搜索,并试图找出从一个州到另一个州的最短距离。在这样做的过程中,我在搜索中走得很远。但随后它在我将当前状态的包含复制到新状态的行处给出了分段错误。 我也尝试过 memcpy,但它给出了相同的分段错误。以下是几行:
*new_state=*current_state;
/*memcpy(new_state, current_state, sizeof(State));*/
所以,是我复制记忆的方式不正确导致了问题。但如果是这样的话,为什么它会持续一段时间然后给出分段错误。请帮忙。
这是我完整代码的链接。 Full Code
【问题讨论】:
-
您可能正在访问一些已经被释放的内存,或者您正在访问一些未初始化的内存 - 很可能 current_state 或 new_state 没有指向段错误点的良好内存位置.我建议使用 valgrind 来解决这个问题。
-
感谢 valgrind 的推荐。我试试看!
标签: c struct segmentation-fault malloc