gpt4 book ai didi

c - C 中奇怪的段错误

转载 作者:行者123 更新时间:2023-11-30 18:07:48 25 4
gpt4 key购买 nike

int * mymalloc(int *array, int size){

//PRINTS THE TIMES MYMALLOC IS CALLED. JUST FOR TESTING;
printf("~~~~~~~~~~~~~~~TIME(S) MYMALLOC WAS CALLED:~~~~~~~~~~~~~~~ %d\n", i++);

//checks
if(size<1){
printf("SIZE NOT VALID\n");
return (int *) 0;
}

printf("MEMORY FREE JUST WHEN MYMALLOC() IS CALLED: %d\n", (*((BLOCK *)array[0])).size);

BLOCK currentHeader = (*((BLOCK *)array[0]));

do{
printf("CURRENT HEADER STATUS: %d\n", currentHeader.status);
if(currentHeader.status == 0){
printf("ok\n");
if(currentHeader.size >= size){

currentHeader.status = 1;

if(currentHeader.size - size < sizeof(currentHeader))
return &array[currentHeader.data];

else{

BLOCK nextHeader;

array[size + currentHeader.data] = (int)&nextHeader;

if(currentHeader.nextb !=0){

(*currentHeader.nextb).previousb = &nextHeader;
nextHeader.nextb = currentHeader.nextb;
}

currentHeader.nextb = &nextHeader;
nextHeader.previousb = &currentHeader;

nextHeader.size = currentHeader.size - size - sizeof(nextHeader);//here?

nextHeader.data = currentHeader.data + size + sizeof(nextHeader); //here?
printf("NEXT HEADER DATA: %d\n", nextHeader.data );

nextHeader.status = 0;
currentHeader.size = size; //changing the currentHeader.size to the "size" given.

printf("%d\n", sizeof(currentHeader));
printf("%d\n", size + currentHeader.data);
printf("%d\n", nextHeader.size);


printf("i return\n");

return &array[currentHeader.data];


}
}
//printf("NOT ENOUGH SIZE");
}

if(currentHeader.nextb !=0){
printf("%d\n",*currentHeader.nextb);
currentHeader = *currentHeader.nextb;

}

}while (currentHeader.nextb != 0);

return (int *) 0;
//printf("%d\n", (*((BLOCK *)array[0])).status );

}

好吧,当我运行这个程序时,实际上当我调用这个方法时,就像这样

mymalloc(testarray,50);

当我注释行 printf("ok\n"); 时,我收到段错误。
我的意思是它只是一个 printf 函数。它如何影响内存??????
您可以将其复制粘贴到您的计算机上并尝试一下吗?
首先使用 printf("ok\n");
然后 //printf("ok\n");

最佳答案

如果您注释该行并且它崩溃,则意味着您的堆栈已损坏。因此,崩溃可能会在任何“随机”点没有任何明显原因的情况下出现和/或消失(当然它不是真正随机的,但看起来可能是这样)。

您可以生成核心转储和/或使用 valgrind 运行和/或逐步调试它吗?

关于c - C 中奇怪的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4237880/

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