У меня есть следующий код C, который дает ошибку:C код прекращает работу
Program stopped at 0x4019b3.
It stopped with signal SIGSEGV, Segmentation fault.
при отладке.
Вот код:
#include <stdio.h>
#include <complex.h>
#include <stdlib.h>
#include <time.h>
int main()
{
clock_t begin, end;
double time_spent;
begin = clock();
int n = 100;int i; int j;
int N = 64;int r;
double complex (s)[4] = {-1-1*I, -1+1*I, 1-1*I, 1+1*I};
double complex symbol[n][N];
for (i=0; i<n; i++){
for (j=0; j<N; j++){
r = rand() % 4;
symbol[i][j]=s[r];
}
// Now add pilots:
symbol[i][11] = 1;
symbol[i][22] = 1;
symbol[i][33] = 1;
symbol[i][44] = 1;
}
end = clock();
time_spent = (double)(end - begin)/CLOCKS_PER_SEC;
return 0;
}
Любая идея, что это не так?
EDIT:
Теперь я могу поставить все это вместе после того, как это ценное обсуждение. Вот рабочий код с синхронизации и распределения памяти и каждая вещь:
#include <stdio.h>
#include <complex.h>
#include <stdlib.h>
#include <time.h>
int main()
{
clock_t begin, end;
double time_spent;
begin = clock();
int n = 100000; int i; int j;
int N = 64;int r;
double complex (s)[4] = {-1-1*I, -1+1*I, 1-1*I, 1+1*I};
double complex (*symbol)[N] = malloc(n * sizeof *symbol);
for (i=0; i<n; i++){
for (j=0; j<N; j++){
r = rand() % 4;
symbol[i][j]=s[r];
}
// Now add pilots:
symbol[i][11] = 1;
symbol[i][22] = 1;
symbol[i][33] = 1;
symbol[i][44] = 1;
}
end = clock();
time_spent = (double)(end - begin)/CLOCKS_PER_SEC;
printf("%3.7f\n",time_spent);
return 0;
}
Что вы сделали - если что-нибудь - попытаться выяснить эту проблему? –
Вам нужно выделить память где-то – almanegra
Эта строка неверна: 'double complex (* symbol) [n] [N] = malloc (n * sizeof * symbol);'. Копируйте более тщательно из ответа R Sahu. Также вы повсеместно прорастали поддельными '*'. Он должен быть символом [i] [j] ', а не' * symbol [i] [j] 'и одинаковым для всех пилотов. –