亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

問題0xC0000005: Access violation writing location?

問題0xC0000005: Access violation writing location?

MMMHUHU 2022-07-27 19:15:54
'字符指針作為函數參數.exe': Loaded 'D:\用戶目錄\Documents\Visual Studio 2010\Projects\字符指針作為函數參數\Debug\字符指針作為函數參數.exe', Symbols loaded.'字符指針作為函數參數.exe': Loaded 'C:\Windows\System32\ntdll.dll', Symbols loaded (source information stripped).'字符指針作為函數參數.exe': Loaded 'C:\Windows\System32\kernel32.dll', Symbols loaded (source information stripped).'字符指針作為函數參數.exe': Loaded 'C:\Windows\System32\KernelBase.dll', Symbols loaded (source information stripped).'字符指針作為函數參數.exe': Loaded 'C:\Windows\System32\msvcr100d.dll', Symbols loaded.First-chance exception at 0x013e14d5 in 字符指針作為函數參數.exe: 0xC0000005: Access violation writing location 0x013e5741.Unhandled exception at 0x013e14d5 in 字符指針作為函數參數.exe: 0xC0000005: Access violation writing location 0x013e5741.The program '[5032] 字符指針作為函數參數.exe: Native' has exited with code -1073741819 (0xc0000005).下面是源碼經過檢查問題出現在*dest1=*src1;但是自己不明白請大家看看 最好附加詳細說明 謝謝?。?!#include"stdio.h"#include"malloc.h"void catstr(char *dest,char *src);void main(){char *dest,*src="help you ???";if((dest=(char *)malloc(80))==NULL){printf("no memory \n");extern(1);}dest="Can I";catstr(dest,src);puts(dest);getchar();}void catstr(char *dest1,char *src1){while(*dest1){dest1++;}while(*src1){*dest1=*src1;src1++;dest1++;}}
查看完整描述

2 回答

?
呼如林

TA貢獻1798條經驗 獲得超3個贊

這個問題有兩種方法解:
1.
對棧的定義不變

seqstack s1;//=NULL;
seqstack *s=&s1;

在主程序中
init(s);

2.修改初始化函數

void init(seqstack **s) /*初始化建立一個空棧*/
{

(*s)=(seqstack*)malloc(sizeof(seqstack));
(**s).top=-1;
printf("\n\nThere is a empty stack!\n");
}

在主程序中
static seqstack *s;

init(&s);

其原因(定義靜態變量會默認初值0,這個你應該知道的)是,
1.你沒給指針分配空間
2.的init(seqstack *s),按你原來的調用是值傳遞,如果你單步跟蹤后你會發現 s還是0。

所以可以說你對指針的了解老指針指向常規變量的用法,當若改變一個指針的值就應該用
指向指針的指針**p.

另外成熟的算法對分配的內存 結束時一定要釋放的,這是好的習慣,如果你做的項目一直跑個
一年半載不重啟,這樣內存早晚會被程序吃光的。

查看完整回答
反對 回復 2022-08-01
?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

內存訪問失敗,我覺得是 dest="Can I";這句導致了問題,字符串除了初始化時能這樣直接等于外,其他情況一般不可以直接等于xx的,這樣之后可能導致dest變為靜態變量,所以下次你賦值到 *dest1=*src1;也就是到dest的末尾時出錯了。修改為如下就行了。

#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';
}


查看完整回答
反對 回復 2022-08-01
  • 2 回答
  • 0 關注
  • 249 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號