2 回答
TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個(gè)贊
這個(gè)問題有兩種方法解:
1.
對(duì)棧的定義不變
seqstack s1;//=NULL;
seqstack *s=&s1;
在主程序中
init(s);
2.修改初始化函數(shù)
void init(seqstack **s) /*初始化建立一個(gè)空棧*/
{
(*s)=(seqstack*)malloc(sizeof(seqstack));
(**s).top=-1;
printf("\n\nThere is a empty stack!\n");
}
在主程序中
static seqstack *s;
init(&s);
其原因(定義靜態(tài)變量會(huì)默認(rèn)初值0,這個(gè)你應(yīng)該知道的)是,
1.你沒給指針分配空間
2.的init(seqstack *s),按你原來的調(diào)用是值傳遞,如果你單步跟蹤后你會(huì)發(fā)現(xiàn) s還是0。
所以可以說你對(duì)指針的了解老指針指向常規(guī)變量的用法,當(dāng)若改變一個(gè)指針的值就應(yīng)該用
指向指針的指針**p.
另外成熟的算法對(duì)分配的內(nèi)存 結(jié)束時(shí)一定要釋放的,這是好的習(xí)慣,如果你做的項(xiàng)目一直跑個(gè)
一年半載不重啟,這樣內(nèi)存早晚會(huì)被程序吃光的。
TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊
內(nèi)存訪問失敗,我覺得是 dest="Can I";這句導(dǎo)致了問題,字符串除了初始化時(shí)能這樣直接等于外,其他情況一般不可以直接等于xx的,這樣之后可能導(dǎo)致dest變?yōu)殪o態(tài)變量,所以下次你賦值到 *dest1=*src1;也就是到dest的末尾時(shí)出錯(cuò)了。修改為如下就行了。
#include"stdio.h"
#include"malloc.h"
#include "string.h"
void catstr(char *dest,char *src);
void main()
{
char *dest,*src="help you ???";
if((dest=(char *)malloc(80))==NULL)
{
printf("no memory \n");
}
strcpy(dest,"Can I");
catstr(dest,src);
puts(dest);
getchar();
}
void catstr(char *dest1,char *src1)
{
while(*dest1)
{
dest1++;
}
while(*src1)
{
*dest1=*src1;
src1++;
dest1++;
}
*dest1 = '\0';
}
添加回答
舉報(bào)
