gpt4 book ai didi

c - 在 C 中使用 malloc 保留内存

转载 作者:行者123 更新时间:2023-11-30 21:08:04 25 4
gpt4 key购买 nike

我想在C中为3个int数组保留内存。它们都是int类型。数组 a 的大小为 n,数组 b 的大小为 m,数组 c 的大小为 m。

我有以下想法:

void *c;
int *a;
int *b;
int *m;

m = malloc((n + m + m +1) * sizeof(int));
a = n;
b = a + m;
c = b + m;

free(m);

当我尝试使用语法访问其中一些时

a[i] = 

我遇到段错误错误。

这是完整的代码:

#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>

void *c;
int *dretve;
int *stol;
int *rez;

int n;
int m;


void *Rezerviraj(void *x){
int c = *((int*)x);
printf("Ušo u funkciju rezerviraj\n");
// sleep(10);
printf("Gotov sam!");
}

int Provjeri(){
int i;
// for(i = n; i < m+n; i++)
// if(stol[i] == 1)
return 0;
return 1;
}



int main(int argc, char *argv[]){

n = atoi(argv[1]);
m = atoi(argv[2]);
int f = 4;

int i = 0;

pthread_t thr_id[2];

c = malloc((n + m + m + 1) * sizeof(int) + n * sizeof(pthread_t));
dretve = n;
stol = dretve + m;
rez = stol + m;

for(i = 0; i < n; i++)
printf("%d ", dretve[i]);

pthread_create(&thr_id[1], NULL, Rezerviraj, &f);
pthread_join(thr_id[1],NULL);

// pthread_create(&thr_id[1], NULL, Rezerviraj,&f);
// pthread_join(thr_id[1],NULL);
// free(c);
return 0;
}

有人可以解释一下什么是错误以及如何修复它吗?非常感谢!

最佳答案

为相同类型的 3 个数组分配内存,

int *a_array;
size_t a_count = foo();

int *ba_array;
size_t b_count = foo();

int *c_array;
size_t c_count = foo();

a_array = malloc(sizeof *a_array * (a_count + b_count + c_count));
b_array = a_array + a_count;
c_array = b_array + b_count;

// code uses a_array, b_array, c_array
...

// When done with all 3, only 1 free() call
free(a_array);

关于c - 在 C 中使用 malloc 保留内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40550777/

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