1 条题解

  • 0
    @ 2025-4-7 21:28:48

    C++ :

    #include <stdio.h>
    #include <stdlib.h>
    /* memory指针记录当前可用地址的起始地址
       start_of_memory指针记录原始内存空间的起始地址
       end_of_memory指针记录原始内存空间的结束地址 */
    char *memory, *start_of_memory, *end_of_memory;
    int main() {
    	char *alloc(int n);
    	void tryfree(char *p);
    	char *result;
    	int m, n, i, new_block_size;
    	scanf("%d %d", &m, &n);
    	memory = (char *)malloc(m);
    	start_of_memory = memory;
    	end_of_memory = memory + m;
    	for (i = 0;i < n;i++) {
    		scanf("%d", &new_block_size);
    		result = alloc(new_block_size);
    		if (result == NULL)
    			printf("%d ", 0);
    		else
    			printf("%d ", 1 + (result - start_of_memory));
    	}
    	printf("\n");
    	return 0;
    }
    /* 内存分配函数 */
    char *alloc(int n) {
    	char *result = NULL;
    	if (memory + n <= end_of_memory) {
    		result = memory;
    		memory += n;
    	}
    	return result;
    }
    /* 内存释放函数 */
    void tryfree(char *p) {
    	while (p < memory) {
    		tryfree(p);
    		p++;
    	}
    }
    
    
    • 1

    信息

    ID
    1375
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者