Tag: 动态

如何在C中动态分配矩阵?

我必须做这个练习: 在C中执行一个管理名为“M”的整数矩阵和一个名为“L”的整数列表的应用程序。 M是方形矩阵[nxn],其中n由用户动态选择。 然后执行此function: 序列化:给定“M”矩阵,它返回具有n ^ 2个元素的列表L. 列表的元素是从第一个到第二个按行排序的M的元素。 第二个function: 反序列化:给定具有n ^ 2个元素的列表L,它返回一个矩阵[nxn],其中L元素按列排序。 所以main()必须是: 用户给出矩阵(n)的维度并用一些整数填充矩阵。 然后调用serialize函数,打印序列化列表 将值5添加到列表的每个值 并调用反序列化函数 并打印最后一个函数给出的矩阵。 ( 所有分配必须是动态的。 ) 我试过这个: #include #include int main(){ int n,i,j; printf(“Give the dimension of matrix [nxn]: “); scanf(“%d”,&n); int **M; M = (int**)malloc(n*sizeof(int*)); for(i=0;i<n;i++){ M[i] = (int*)malloc(n*sizeof(int*)); } int *L = serialize(M,n); int size = n*n; for(i=0;i<size;i++){ […]

如何保护动态char不被第二个动态char覆盖?

#include #include #include char print_two(char *reg, char *s) { int i, l_s = (int) strlen(s), l_reg = (int) strlen(reg); for(i = 0; i < l_reg; i++) { printf("\n %c \n", reg[i]); } return 0; } int main(void) { char reg; printf("Give a rule: "); scanf("%s", &reg); char s; printf("Give a string: "); scanf("%s", &s); print_two(&reg, […]

如何为指向数组的指针执行memset?

如何为指向数组的指针执行memset? int (*p)[2]; p=(int(*))malloc(sizeof(*p)*100); memset(p,0,sizeof(*p)*100); 这个分配是否正确?

如何为函数内的数组分配内存

我正在尝试从用户那里收到一个号码。 并创建一个具有该数字的数组,但是在函数内部。 这是我的几次尝试,我遇到了运行时错误。 非常感谢帮助。 #include #include int* Init(int* p, int num); int main() { int *p; int num, i; puts(“Enter num of grades:”); scanf(“%d”, &num); Init(&p, num); //for (i = 0; i < num; i++) //{ // scanf("%d", &p[i]); //} free(p); } int* Init(int* p, int num) { int *pp; p = (int *)malloc(num*sizeof(int)); if […]

在预定义的struct上创建动态矢量

我有一个预定义的结构要使用: typedef struct somestruct_s { int s; union { unsigned char *ptr; unsigned char l_ptr[sizeof(char *)]; }; }somestruct_t, *somestruct; 它包含减少内存使用量的联合。 我知道由于m32和m64编译(指针大小),大小可能会有所不同。 我的问题是如何“使用”该结构来进行精确分配。 此结构的目的是实现基本位操作,s变量包含位图的大小(以字节为单位)。 如果位图可以适合指向位图的指针占用的内存,那么我们在那里分配她。 我在上面写了一些位图操作,但我无法真正得到结构或如何操作它。

C中的动态多维数组

在c中读了几篇关于多维数组动态内存分配的文章,我遇到了以下代码片段:( 文章链接) #define COLS 5 int (*rptr)[COLS]; int main(void) { int nrows = 10; int row, col; rptr = malloc(nrows * COLS * sizeof(int)); for (row = 0; row < nrows; row++) for (col = 0; col < COLS; col++) rptr[row][col] = 17; return 0; } 这里,multidimensinal数组定义为int(* rptr)[COLS],然后动态链接到malloc(nrows * COLS * sizeof(int))。 现在问题是指向如何工作,例如:如果指向地址从100,101,102开始……等等 (假设int为简单起见需要1个字节) rptr[0] […]

从C中的文件中读取一行,动态地

#include #include int main() { FILE *input_f; input_f = fopen(“Input.txt”, “r”); //Opens the file in read mode. if (input_f != NULL) { char line[2048]; while( fgets(line, sizeof line, input_f) != NULL ) { //do something } fclose(input_f); //Close the input file. } else { perror(“File couldn’t opened”); //Will print that file couldn’t opened and why. […]

如何为动态加载编写MPI包装器

由于MPI不提供二进制兼容性,只提供源兼容性,因此我们不得不将求解器源代码发送给客户,以便他们将我们的求解器与其首选版本的MPI一起使用。 好吧,我们已经达到了无法再提供源代码的程度。 因此,我正在研究如何围绕MPI调用创建包装器。 我们的想法是为我们提供存根函数的头,用户将编写实现,从中创建动态库,然后我们的解算器将在运行时加载它。 但解决方案并不“优雅”,容易出错。 因为有struct参数(比方说, MPI_Request ),其struct定义可能因MPI实现而异,我们需要接受(void*)许多存根参数。 此外,如果参数的数量可以从一个MPI到另一个MPI(我不确定它是否可以保证不会发生),那么唯一的方法就是使用var_args 。 //header (provided by us) int my_stub_mpi_send(const void buf, int count, void* datatype, int dest, int tag, void* comm); //*.c (provided by user) #include #include int my_stub_mpi_send(const void buf, int count, void* datatype, int dest, int tag, void* comm) { return MPI_Send(buf, count, *((MPI_Datatype) datatype), dest, […]

MPI_Allgather和动态结构

我想用MPI_Allgather()发送一个结构数组,但我的结构有一个动态数组: typedef struct { float a; int* b; } structure_t; 我的结构通过以下方式初始化: structure_t *resultat = (structure_t*) malloc( sizeof( structure_t ) + n * sizeof( int ) ); 但是如何使用MPI_Allgather发送我的结构? 如何创建两个(发送和接收)数组?

动态添加到未知大小的char数组

我目前正在进行一项任务,我必须从每个文件中一次一个字符串提取文本,然后将它们连接起来并打印出来。 我找到了一种方法来提取我的角色并将其保存在变量广告中。 如何将这些char添加到我的char数组中以打印到最后? 我最初将它malloc到一个char的大小,并在每个if语句我realloc。 我在网上找到的所有指南都建议我使用strcat,但我无法传递广告变量来追加。 我该如何解决这个问题? #include #include #include #include #include pthread_mutex_t thread1; pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; char *output; void* processing(void* file) { FILE *test = fopen(“drive1.data”, “r”); FILE *drive1 = fopen(“drive1.data”, “r”); FILE *drive2 = fopen(“drive2.data”, “r”); FILE *drive3 = fopen(“drive3.data”, “r”); FILE *drive4 = fopen(“drive4.data”, “r”); FILE *drive5 = fopen(“drive5.data”, “r”); int c, […]