2015-01-11 3 views
-3

내 C/C++ 코드와 관련된 질문이 있습니다. 몇 가지 연구를 시도했지만 내 문제에 대한 구체적인 대답이 없습니다. 가능한 한 빨리 내 질문에 대한 답변을 보내주기 바랍니다.오류 C4700 : 초기화되지 않은 지역 변수 'A'사용

#include <omp.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <iostream> 
using namespace std; 
#define M 500 
#define N 500 
int 
main() 
{ 
    //set number of threads here 
    //omp_set_num_threads(8); 
    int i, j, k; 
    double sum; 
    double **A, **B, **C; 

    A = malloc (M * sizeof (double *)); 
    B = malloc (M * sizeof (double *)); 
    C = malloc (M * sizeof (double *)); 
    for (i = 0; i < M; i++) 
    { 
     A[i] = malloc (N * sizeof (double)); 
     B[i] = malloc (N * sizeof (double)); 
     C[i] = malloc (N * sizeof (double)); 
    } 
    double start, end; 
    for (i = 0; i < M; i++) 
    { 
     for (j = 0; j < N; j++) 
     { 
      A[i][j] = j * 1; 
      B[i][j] = i * j + 2; 
      C[i][j] = j - i * 2; 
     } 
    } 
    start = omp_get_wtime(); 
    for (i = 0; i < M; i++) 
    { 
     for (j = 0; j < N; j++) 
     { 
      sum = 0; 
      for (k = 0; k < M; k++) 
      { 

       sum += A[i][k] * B[k][j]; 
      } 
      C[i][j] = sum; 
     } 
    } 

    end = omp_get_wtime(); 
    printf ("Time of computation: %f\n", end - start); 

    cin.get(); 
    return 0; 
} 

코드 때문에 몇 가지 버그의 종료 :

다음은 C 언어 내 전체 코드입니다. 코드의 결과는 여기에 주어집니다 :

error C4700: uninitialized local variable 'A' used 

error C4700: uninitialized local variable 'B' used 

error C4700: uninitialized local variable 'C' used 

내 질문 :

안부를 고려하시기 바랍니다. 어쩌면 malloc 대신 "새로운"사용하는 것이 좋습니다 ++

A = (double**) malloc (M * sizeof (double *)); 
    B = (double**) malloc (M * sizeof (double *)); 
    C = (double**) malloc (M * sizeof (double *)); 
    for (i = 0; i < M; i++) 
    { 
     A[i] = (double*) malloc (N * sizeof (double)); 
     B[i] = (double*) malloc (N * sizeof (double)); 
     C[i] = (double*) malloc (N * sizeof (double)); 
    } 

당신은 C를 사용하는 경우 :

+1

을 '코드가 종료됩니다'라고 말하면 '컴파일러에서 다음과 같은 오류가 발생합니다'라고 생각하십니까? 컴파일러 오류는 줄 참조를 제공해야합니다. 그들이 어떤 라인을 참조합니까? 위에서 붙여 넣은 코드에서 알 수있는 한,'A','B' 및'C'는 각각'malloc'에 의해 올바르게 초기화됩니다. – abligh

+3

귀하의 코드가 C 컴파일러를 사용하여 컴파일되지 않는다고 생각합니다. 프로그램이 C++이기 때문에 C++로 질문에 태그를 붙이십시오 ('#include '및'using namespace std;') –

+3

이것은 유효한 C 코드도 C++ 코드도 아닙니다. 유일한 오류가 있다고 확신합니까? 이것들은 캐스트가없는'double ** '에'void *'가 무효로 지정되는 것과 같은 초기 오류에 의해 유발 될 가능성이 있습니다 (C++에서). C++을 사용한다면 어떤 경우에도'new'를 사용하는 편이 낫습니다. VC++의 어떤 버전을 사용하고 있습니까? – Clifford

답변

0

의 malloc()는 당신이 그것을 캐스팅해야 무효 포인터를 반환

A = new double* [M]; 
    B = new double* [M]; 
    C = new double* [M]; 
    for (i = 0; i < M; i++) 
    { 
     A[i] = new double[N]; 
     B[i] = new double[N]; 
     C[i] = new double[N]; 
    } 
관련 문제