Ошибка проверки среды выполнения Visual Studio 2010 # 3 - PullRequest
1 голос
/ 23 сентября 2011

Похоже, что Microsoft снова имеет неприятные последствия в VS2010.Вот мой код

#include "string.h"
typedef struct s_test
{
    unsigned char a[20];
} t_test, *p_test;
void initialize(t_test t)
{
    memset(t.a, 0, 20);
}
void main()
{
    t_test t;
    initialize(t);
}

и он выдает

Run-Time Check Failure #3 - The variable 't' is being used without being initialized.

Хорошо ... поскольку в других случаях проверка выполнения помогает, поэтому я реже отключаю ее в решении,Но как, черт возьми, я должен делать с этим?Вы можете предложить изменить способ передачи аргумента указателям.Однако это было бы неприятно в отношении согласованного стиля кодирования.Теперь я чувствую себя сыроедом для MS за этот BRILLIANT материал; p

Ответы [ 2 ]

2 голосов
/ 23 сентября 2011

Ну, отчет об ошибке, который вы получаете, является совершенно верным и соответствующим сообщением об ошибке. Это именно то, что вы делаете: вы используете неинициализированное значение. Вы пытаетесь скопировать неинициализированный объект - в этом случае, конечно, ожидается отчет из программы настройки времени.

По сути, то, что вы делаете в своем коде, эквивалентно этому

int a, b = a;

Этот код вызовет ту же ошибку по той же причине. Итак, почему вы жалуетесь на это?

2 голосов
/ 23 сентября 2011

Это потому, что вы передаете t по значению - унифицированному значению.Определите вашу функцию инициализации следующим образом, чтобы она действительно могла изменять переданный объект, и все хорошо:

void initialize(t_test *pt) 
{
    memset(pt->x, 0, 20); // x not a
}

Кроме того, ради всего святого, измените:

void main()

до

int main()
...