[英]C - program crashes after free() is called
在遵循本教程的同時,我最近一直在使用指針,按位操作,malloc等進行鍛煉和試驗,遇到了崩潰,我不知道如何解決(不刪除free())。
教程代碼與我的教程代碼完全相同,但具有完全相同的free()函數,並且對於它們而言,它們均有效。
這是代碼:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *convertBase(unsigned int InNumber, int base, char *pConvertedNumber){
char hexVal[]="0123456789ABCDEF";
if(base<2 || base>16){
printf("Enter a base between 2 and 16");
exit(1);
}
*pConvertedNumber = '\0';
do{
int value = InNumber % base;
pConvertedNumber = pConvertedNumber - 1;
*pConvertedNumber = hexVal[value];
InNumber/=base;
}while(InNumber !=0);
return pConvertedNumber;
}
void main(){
unsigned int six = 6;
unsigned int seven = 7;
char *pConvertedNumber;
pConvertedNumber = malloc(33 * sizeof(char));
unsigned int AND = six & seven;
printf("%s & ", convertBase(six, 2, pConvertedNumber));
printf("%s = ", convertBase(seven, 2, pConvertedNumber));
printf("%s \n\n", convertBase(AND, 2, pConvertedNumber));
free(pConvertedNumber);
}
您通過將指針移至該行的范圍外來調用未定義的行為
pConvertedNumber = pConvertedNumber - 1;
嘗試將傳遞給convertBase
三個pConvertedNumber
更改為pConvertedNumber + 32
,以使指針的時間不會超出范圍。
另請注意,除非在特殊情況下使用非標准簽名,否則應在托管環境中使用標准int main(void)
代替void main()
在C89中是非法的,並且在C99或更高版本中由實現定義)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.