gpt4 book ai didi

C - 调用 free() 后程序崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 06:19:11 25 4
gpt4 key购买 nike

我最近一直在练习和试验指针、按位运算、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 以便指针 aritimetic 不会超出-范围。

另请注意,您应该在托管环境中使用标准的 int main(void) 而不是 void main(),这在 C89 中是非法的,在 C99 中是实现定义的或更高版本,除非您有特殊原因使用非标准签名。

关于C - 调用 free() 后程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38956982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com