簡體   English   中英

C-調用free()后程序崩潰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM