【发布时间】:2011-05-13 09:06:36
【问题描述】:
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 = ¤tHeader;
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");
【问题讨论】:
-
运行它?很好,但是你能给我们我们需要的所有资源吗?
标签: c segmentation-fault