| | |
[Warning] address of local variable returned???
Please support our C++ advertiser: Intel Parallel Studio Home
![]() |
•
•
Join Date: Jul 2006
Posts: 4
Reputation:
Solved Threads: 0
Hi. I picked up Dev C++ the other day after a while of not using it. Here's my question: I can't figure out what's wrong with my code Basically, the program prompts for a command. If the command starts with 'open:', then it puts the following character(s) within "<>"s. This is a C++-oriented HTML writing program. It's not too usefull as of now, but I'm planning on making it able to debug. If you think you can help, but you need more info, please email me at pbossier (at) cox (dot) net. Attached is my source file.
When I comment out the
it works fine. But when I leave it in, I get an error at the line marked with an *** that says 31 "[Warning] address of local variable `temp' returned."
C++ Syntax (Toggle Plain Text)
#include <cstdlib> #include <iostream> #include <fstream> #include <string> #include <stdio.h> using namespace std; int arrayEqu(char array1[65535], char array2[65535], int length) { int i,ret = 1; for (i = 0; i < length; i++) { if (array1[i] != array2[i]) { ret = 0; } } return ret; } void copyArr(char array1[65535], char array2[65535]) { int i; for (i = 0; i < 65535; i++) { array2[i] = array1[i]; } } char* subArr(char array[65535], int length) { int i, j = 0; **** char temp[65535 - length + 1]; **** for (i = length - 1; i < 65535 - length - 1; i++) { temp[j] = array[i]; j++; } return temp; } int main(int argc, char *argv[]) { int i, com = 0; char fileName[30], input[65535], secInput[65535]; printf("Welcome to parker's HTML creator. Type a name for your HTML document...\nFile name: "); scanf("%s",fileName); printf("\nNow type a command (type 'help' for help)"); strcat(fileName, ".html"); ofstream toHtml (fileName); loop:; printf("\nCommand: "); scanf("%s",input); com = 0; if (arrayEqu(input, "quit", 5)) { return 0; } if (arrayEqu(input, "help", 5)) { printf("\nThe possible directive commands are: 'open:', 'close:', and 'comp:'."); printf("\n\nType an operand directly after the ':' to write it to the HTML file."); printf("\n\nTo type in a paragraph or similar text block, just type the text."); printf("\n\nNote: no word can be more than 65535 characters long, and cannot begin with a"); printf("\ndirective command."); printf("\n\nNote: you can enter multiple lines of code in 1 statement by seperating"); printf("\ncommands with spaces (several 'Command:' lines will appear)."); printf("ignore them."); printf("\n\nType 'quit' to quit. Closing the DOS window will not save your file.\n"); goto loop; } if (arrayEqu(input, "open:", 5)) { toHtml << "<" << subArr(input, 6) << ">\n"; com = 1; } if (arrayEqu(input, "close:", 6)) { toHtml << "</" << subArr(input, 7) << ">\n"; com = 1; } if (arrayEqu(input, "comp:", 5)) { copyArr(subArr(input, 6), secInput); if(arrayEqu(secInput, "clear")) { for (i = 0; i < 28; i++) { printf("\n"); } } if(arrayEqu(secInput, "run")) { system(fileName); } com = 1; } if (!com) { toHtml << input << " "; } goto loop; }
When I comment out the
C++ Syntax (Toggle Plain Text)
if (arrayEqu(input, "comp:", 5)) { copyArr(subArr(input, 6), secInput); if(arrayEqu(secInput, "clear")) { for (i = 0; i < 28; i++) { printf("\n"); } } if(arrayEqu(secInput, "run")) { system(fileName); } com = 1; }
The address of a local variable cannot be returned from a function. I think the problem is with the function
char* subArr(char array[65535], int length)
At the end of this function you are returning "temp" which is the starting address of the array temp which is created in this function.
Local variables are placed in the stack. Once the closing braces of that function is executed, the stack is deallocated.
char* subArr(char array[65535], int length)
At the end of this function you are returning "temp" which is the starting address of the array temp which is created in this function.
Local variables are placed in the stack. Once the closing braces of that function is executed, the stack is deallocated.
YOur function is like
To be in control of the array returned by the function you can try allocating the array or placing it on heap memory using the call to "malloc" somewat like this
So here u are in command of the array returned. But do take care to free the allocated memory when u are done with the returned array.
Hope it helped,
Bye.
C++ Syntax (Toggle Plain Text)
char* subArr(char array[65535], int length) { int i, j = 0; **** char temp[65535 - length + 1]; **** for (i = length - 1; i < 65535 - length - 1; i++) { temp[j] = array[i]; j++; } return temp; }
To be in control of the array returned by the function you can try allocating the array or placing it on heap memory using the call to "malloc" somewat like this
C++ Syntax (Toggle Plain Text)
char* subArr(char array[65535], int length) { int i, j = 0; char* temp = (char*) malloc (65535 - length + 1); for (i = length - 1; i < 65535 - length - 1; i++) { temp[j] = array[i]; j++; } return temp; }
So here u are in command of the array returned. But do take care to free the allocated memory when u are done with the returned array.
free (temp) Hope it helped,
Bye.
I don't accept change; I don't deserve to live.
Since you've already included string, why not use std::string for all your strings rather than messing about with char arrays, with their fixed length, no overflow protection, do it yourself alloc and free problems etc etc.
> char temp[65535 - length + 1];
C++ doesn't have variable length arrays, you're relying on a compiler-specific extension to do this.
> char temp[65535 - length + 1];
C++ doesn't have variable length arrays, you're relying on a compiler-specific extension to do this.
static char temp[65535]; would be a quick fix hack in this particular case. ![]() |
Similar Threads
- cout is too slow (C++)
- A puzzl about function (C)
Other Threads in the C++ Forum
- Previous Thread: locating a file...
- Next Thread: is learn C++ in 24 hours good?
| Thread Tools | Search this Thread |
api array based beginner binary c++ c/c++ calculator char char* class classes code compile compiler console conversion count delete deploy desktop directshow dll download dynamic dynamiccharacterarray email encryption error file forms fstream function functions game givemetehcodez google graph gui homeworkhelp homeworkhelper iamthwee ifstream input int integer java lib linkedlist linker linux list loop looping loops map math matrix memory news node numbertoword output parameter pointer problem program programming project proxy python random read recursion recursive reference return rpg sorting string strings struct temperature template templates test text text-file tree unix url variable vector video visualstudio win32 windows winsock wordfrequency wxwidgets






