
作业社区
探索学习新天地,共享知识资源!
慕运维8597106 的学生作业:
错误1:拷贝构造传入的参数需要是引用 错误2:拷贝构造是浅拷贝,并没有重新分配内存,复制数据 错误3:delete data应该是delete [] data; 构造函数调用了5次 第一次:Test obj1(3);//普通构造 第二次:Test function(Test obj)//参数传递调用拷贝构造 第三次: function里面的Test tmp = obj; 第四次:function的返回值,因为tmp在函数结束的时候要释放,又调用了一次拷贝构造用于返回 第五次:Test obj2 = function(obj1);//obj2 = 调用拷贝构造 析构函数也调用了5次 function里面参数和Test tmp = obj; 各调用一次 累计两次 return之后的临时的拷贝也会在程序结束的时候调用一次 另外两次是main函数里的obj1和obj2 #include using namespace std; class Test { public: Test(int size) { cout





慕运维8597106 的学生作业:
#include #include using namespace std; class String { public: String(const char *str = NULL); void show(void); private: char *str; }; String::String(const char *str) { if (str == NULL) { this->str = NULL; } else { this->str = new char[strlen(str) + 1]; strcpy(this->str, str); } } void String::show(void){ for(char *p = this->str;p && *p;p++){ cout





weixin_慕哥3021856 的学生作业:
#include #include #include #include #include #include static int number = 0; static int total_produce_num = 0; static int total_consume_num = 0; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; void *thread_handler(void *arg) { int cnt = atoi((char *)arg); int i = 0; for (i = 0; i < cnt; i++) { pthread_mutex_lock(&mutex); printf("线程 [%ld] 生产1个产品, 产品数量是 %d\n", pthread_self(), ++number); pthread_mutex_unlock(&mutex); usleep(1000); // 模拟生产耗时 } return NULL; } int main(int argc, const char *argv[]) { int i = 0, err = 0; if (argc < 2) { fprintf(stderr, "Usage: %s producer1_num producer2_num ...\n", argv[0]); exit(EXIT_FAILURE); } // 创建生产者线程 pthread_t producers[argc - 1]; for (i = 1; i < argc; i++) { // 获取生产数量的和 total_produce_num += atoi(argv[i]); err = pthread_create(&producers[i-1], NULL, thread_handler, (void *)argv[i]); if (err != 0) { perror("pthread_create()"); exit(EXIT_FAILURE); } } // 消费者 while (total_consume_num < total_produce_num) { pthread_mutex_lock(&mutex); if (number > 0) { printf("消费1个产品,产品数量是 %d\n", --number); total_consume_num++; } pthread_mutex_unlock(&mutex); usleep(1000); } for (i = 0; i < argc - 1; i++) { pthread_join(producers[i], NULL); } printf("生产总数: %d, 消费总数: %d\n", total_produce_num, total_consume_num); return 0; }





weixin_慕哥3021856 的学生作业:
#include #include #include #include #include #define MAX_ARGS 20 // 最大参数数量 int main(void) { pid_t cpid; char order[256]; // 用户输入的内容 char *args[MAX_ARGS]; // 命令参数 char *token = NULL; // 用于分割字符串的临时指针 int status = 0; // 子进程的状态 while (1) { printf("minishell> "); fflush(stdout); if (fgets(order, sizeof(order), stdin) == NULL) { printf("\n"); break; } // 移除输入末尾的换行符 order[strcspn(order, "\n")] = '\0'; int i = 0; // 分割用户的输入为命令和参数 token = strtok(order, " "); while (token && i < MAX_ARGS - 1) { args[i++] = token; token = strtok(NULL, " \t"); } // 参数数组以NULL结尾 args[i] = NULL; // 跳过空输入(如回车) if (!args[0]) continue; // 内置命令exit if (strcmp(args[0], "exit") == 0) break; // 创建子进程来执行命令 cpid = fork(); if (cpid == -1) { perror("Failed to fork()"); continue; } else if (cpid == 0) { // 子进程执行命令 execvp(args[0], args); // 若execvp返回,表示执行失败 perror("Failed to execvp()"); exit(EXIT_FAILURE); } else { // 父进程等待子进程退出 waitpid(cpid, &status, 0); } } return 0; }




