I\'m writing with visual c++ and when I compile this error occures:
C:\\Program Files (x86)\\MSBuild\\Microsoft.Cpp\\v4.0\\Platforms\\Win32\\Microsoft.Cpp.Wi
I got the same error when I forgot the return statement in the following method:
char SpiRAM::write_byte(int address, char data_byte)
{
assert(address >= 0);
assert(address < SRAM_SIZE);
_sram[address] = data_byte;
return data_byte;
}
You can actually see the proper error messages instead of Microsoft's arbitrary error codes. But since the error list is always forcibly made visible when there are errors, it isn't quite so obvious. Next to the tab Error List
is another tab Output
, which shows the raw error output. I'm not sure if that tab exists in all versions since I'm using 2019, but there might be something very similar in older versions anyways. Differently named perhaps, or an entirely separate window instead of grouped with Error List
.
In the case of another answerer here that exact tab would've shown: error C4700: uninitialized local variable 'm' used
Which would have saved him from having to dig through all his code. =]
And if you forget a return value for a function that requires it, you'll see: error C4716: 'foo': must return a value
This error occured to me with C++ code with visual studio 2019 because I did not initialize my for-loop
correctly.
I did:
for (int m; m < bytewidths + 1; m++) {}
rather than
for (int m=0; m < bytewidths + 1; m++) {}
I think that the way to fix this problem is to solve your recent code manually
Just wanted to add another case where this happens with Visual C++ 2019 (16.1.4):
...
char *s;
for(int i = 0; i < n; ++i)
{
if(i == 4) // we know n is going to be >= 4 but Visual C++ doesn't
s = getStringPointerFromSomewhere();
}
puts(s);
Visual C++ will print a message in the Output: potentially uninitialized local pointer variable 's' used
, but crash instead of reporting it as a normal error or warning (arguably this should be a warning, since it's perfectly legal C code).
The solution for this one is to just assign s to NULL after declared:
char *s = NULL;
(So... just use the probably good habit of initializing pointers and other variables when declared I guess.)
You should check your your source files; it's probable that the compiler can't find the source file maybe you typed the wrong name. eg writing #include <isotream>
instead of #include <iostream>
will cause the problem.
This happened me for a variety of different reasons:
1) I forgot to add a return statement to a non-void function.
2) I tried to use an uninitialized pointer.
3) I wrote a loop like for(int i=i;...) instead of for(int i=0;...)
You can check your code for these and it may help.