Как исправить предупреждение C4700 в C ++ с помощью неинициализированных указателей?
Я прочитал многие предыдущие сообщения на C4700, но я не могу найти решение моей проблемы.
У меня есть небольшой скрипт, написанный для демонстрации указателей на структуру:
Когда я его компилирую, я получаю два предупреждения C4700 для неинициализированных локальных переменных num и fooptr. Я пошел вперед и инициализировал оба значения до NULL, поэтому ошибка компилятора исчезла, но не удивительно, что я получил исключение:
Необработанное исключение в 0x00265DF7 в файле test.exe: 0xC0000005: место записи нарушения доступа 0x00000000.
Видите ли, я всегда думал, что, когда я не инициализирую эти указатели, они будут автоматически инициализированы случайными адресами (так же, как неинициализированные ints/chars/doubles будут назначены мусора) —so не так ли будет здесь?
Если инициализация в этом случае действительно необходима (почему?), То есть ли простой способ решения этой проблемы?
Как исправить предупреждение C4700 в C ++ с помощью неинициализированных указателей?
Я прочитал многие из предыдущих постов на C4700, но не могу найти решение своей проблемы.
У меня есть небольшой сценарий, написанный для демонстрации указателей структуры:
Когда я его компилирую, я получаю два предупреждения C4700 о неинициализированных локальных переменных num и fooptr.
Я пошел дальше и инициализировал оба значения NULL, поэтому ошибка компилятора исчезла, но неудивительно, что я получил исключение:
Необработанное исключение в 0x00265DF7 в testing.exe: 0xC0000005: расположение записи нарушения прав доступа 0x00000000.
Вы видите, я всегда думал, что когда я не инициализирую эти указатели, они будут автоматически инициализироваться со случайными адресами (точно так же, как неинициализированным ints / chars / doubles будут назначаться garbages) — так не должно ли это быть здесь?
Если инициализация в этом случае действительно необходима (почему?), То есть ли легкий способ обойти эту проблему?
Решение
Неинициализированные переменные не инициализируются случайными значениями, они неинициализированы. На уровне машинного кода они имеют какое-либо значение при создании. Это может быть или не быть адрес реального объекта. В любом случае, это попытка получить доступ к значению неинициализированного указателя, как будто есть объект по этому адресу.
Итак, ваш компилятор делает вам одолжение, выдавая предупреждение (это не обязательно делать), потому что ваш код имеет неопределенное поведение.
тогда есть ли простой способ обойти эту проблему?
Установите указатели так, чтобы они указывали на действительные объекты, прежде чем разыменовывать их. Если вы этого не сделаете, то нет никаких обещаний о том, как будет вести себя ваша программа.
Другие решения
ты должен написать
И то же самое относится struct содержание.
C4700 не является ошибкой. DOT. Но MSVC не удается скомпилировать на C4700, что является ошибкой, поскольку по умолчанию включен переключатель компилятора «/ sdl»
C4700 discution на сайте visualstudio ,
Коммутатор MSDN / SDL для версии 2012+
C4700 c как исправить
#include "stdafx.h"
#include <iostream>
#include <conio.h>
void main()
<
int z;
int x;
printf ("\n Opredelenie min chisla\n");
printf ("V posl otrits chisel.\n");
printf ("Vvodite otriz chisla. Dlya zaversh. nazhmi 0.\n");
printf ("-> ");
scanf_s("%i", &z);
z = x;
while (x < 0)
<
if (x < z) z = x ;
printf("-> ");
scanf_s("%i", &z);
>
printf ("min chislo posl: ");
printf ("%i\n", z);
printf ("\n dlya zaversh nazhmi <Enter>");
>
Пишет "error C4700: использована неинициализированная локальная переменная "x" ", как исправить?
| Дмитрий Огнев |
| Посмотреть профиль |
| Найти ещё сообщения от Дмитрий Огнев |
| Дмитрий Огнев |
| Посмотреть профиль |
| Найти ещё сообщения от Дмитрий Огнев |
Зачем z присваивается значение х? Может быть наоборот?
Вообще, как звучало задание?
надо ввести только отрицательные числа, а прога выводит меньшее из всех введенных.
Помогите найти ошибку!
После отладки появляются такие ошибки: warning C4700: использована неинициализированная локальная переменная «S»;
warning C4700: использована неинициализированная локальная переменная «P»;
#include «stdafx.h»
#include<iostream>
#include<math.h>
#include<conio.h>
using namespace std;
int main()
<
у S нет начального значения.
в итоге,
S = S+A[ n ][ m ]; — будет все что угодно, но не то, что ты ожидаешь.
задай перед циклом S = 0;