xcode를 C와 함께 사용하고 다음 코드에 이상한 문제가 있습니다.이상한 배열 할당 동작
알고리즘이 conv 함수에서 y [k] = 0.0 행에 도달하면 x 배열이 0으로 채워질 때, 나는 왜 내 자신의 방식으로이 오류를 이미 수정했는지 이해해야합니다. 두 번째 행에 주석을 달고 main 함수의 세 번째 행의 주석 처리를 제거하면 문제가 나타나지 않습니다 (아래 참조). 나는 generateSquareSignal에 배열을 재 할당한다는 것을 알고 있지만 이것이 내가 생각하는이 버그의 이유는 아니다.
int length = 100;
double *output = (double*) malloc(10 * length * sizeof(double));
//double *output;
output = generateSquareSignal(length);
double *input1 = (double*) malloc(length * sizeof(double));
double *input2 = (double*) malloc(length * sizeof(double));
for (int i = 0; i < length; i++) {
input2[i] = output[i];
input1[i] = output[i];
//printf("-%d=%lf\n",i ,input1[i]);
}
conv(input1, length, input2, length, output, 2 * length);
double* generateSquareSignal(int length) {
printf("double* generateSquareSignal(int length)\n");
double *signal = (double*) malloc(length * sizeof(double));
int length_period = length/kPeriodSignal;
for(int i=0; i < length; i++) {
if (i % (length_period) < (length_period/2)) {
signal[i] = 1.0;
} else {
signal[i] = -1.0;
}
//printf("%d. - %lf\n", i, signal[i]);
}
return signal;
}
void conv(double *x, int N_signal,
double *h, int N_kernel,
double *y, int N_output) {
int k;
for(k = 0; k < N_signal + N_kernel; k++) {
y[k] = 0.0;
}
for (int i = 0; i < N_signal; i++) {
printf("%lf-%lf\n", x[i], y[i]);
}
for(int i = 0; i < N_signal; i++) {
for(int j = 0; j < N_kernel; j++) {
double xx = x[i];
double hh = h[j];
double yy = y[i + j];
y[i + j] += x[i] * h[j];
//printf("=%lf\n", y[i + j]);
}
}
}
에 처음으로 200 점을 memseting하여
conv()
루프y
을 설정하는 당신의 필요를 제거 할 수 있습니다 : http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc –