2016-11-11 12 views
-3

Cで3つのint配列のメモリを予約したいと思います。これらはすべてint型です。 配列aはサイズn、配列bはサイズm、配列cはサイズmです。Cでmallocを使用してメモリを予約する

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] = 

の構文を使用してそれらのいくつかにACCESにしようとしたとき、私はセグメンテーションフォールトエラーを得た:

は、私は、次のアイデアを持っています。ここで

は完全なコードです:

#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つのアレイ同じタイプのためのメモリを割り当て

+0

ここ_array_ですか? –

+0

mallocを使ってどうすればいいですか? @Sourav Ghosh – zuma

+1

[MCVE]をお願いします。それ以外の場合は、何が間違っているかを推測するだけです。 –

答えて

0

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); 
+0

多くの感謝! foo()とsize_tとは何ですか? – zuma

+0

@zuma 'foo()'は、 'a_count、b_count、... 'を代入するために値を返した_some function_です。 'size_t'は、配列のインデックスとサイズの脱灰に最もよく使われる符号なしの型です。 'int'は狭くなるかもしれません。 – chux

+0

@zuma '(n + m + m + 1)* sizeof(int)+ n * sizeof(pthread_t)'のように異なる型の割り当てを組み合わせないようにすることを推奨します。これは不可能ですが、食料の追加コード/チェックが必要です。 – chux

関連する問題