typedef struct tape
{
char symbol;
struct tape *next;
struct tape *prev;
}tape;
tape *pt;
void GenerateInputTape(int n)
{
int i;
pt=(tape*)malloc(sizeof(tape));
pt->symbol='B';
pt->prev=NULL;
pt->next=(tape*)malloc(sizeof(tape));
pt=pt->next;
for(i=0;i<2*(n+1);i++)
{
if(i < (2*n/2))
pt->symbol='0';
else
pt->symbol='1';
pt->prev=pt;
pt->next=(tape*)malloc(sizeof(tape));
pt=pt->next;
}
pt->symbol='B';
pt->next=NULL;
}
void ShowTape()
{
//Move tape to the beginning
while (pt->prev != NULL)
pt=pt->prev; //crash point
//List out all of the elements
while ((pt->next) != NULL)
{
printf("%c",pt->symbol);
pt=pt->next;
}
puts("\n");
}
這是程序的代碼段已被設計爲創建一個雙向鏈表,與B0往裏面... N011 ....(N + 1)1B和字符打印它們。不幸的是,它在回溯時崩潰。爲什麼?在turing_machine.exe在0x771a15de崩潰中橫過回雙向鏈表
未處理的異常:0000005: 訪問衝突閱讀位置0xcdcdcdd5。
哦,實施了圖靈機? :) – 2013-01-11 20:03:38
(但是,這並不能解釋爲什麼你要投射'malloc()'的返回值...) – 2013-01-11 20:04:20
@ H2CO3噓,這是個祕密;) – 0x6B6F77616C74