gpt4 book ai didi

c++ - C++中指针的问题

转载 作者:行者123 更新时间:2023-11-28 01:12:39 25 4
gpt4 key购买 nike

char *str = NULL;
str = Operation(argv[1]);
cout << Cal(str);

操作函数返回一个指针,但我真的不知道为什么Cal中的strnull。在第 2 行,它仍然有内容。我错过了什么?


char* Operation(char* name)
{
fstream file(name,ios::in);
char c;
char stack[256]; int count_stack = -1;
char result[256]; int count_result = -1;
while ( !file.eof() )
{
c = file.get();
if ( c=='(')
{
count_stack++;
stack[count_stack] = c ;
}
else if ( isOperand(c) )
{
count_result++;
result[count_result] = c;
}
else if ( isOperator(c) )
if ( isOperator( (stack[count_stack]) )>0 )
if ( isOperator(c) > isOperator( stack[count_stack] ) )// dua ra so sanh khi trong stack co n>=1 ptu
{
count_result++;
result[count_result] = c;
}
else
{
count_result++;
result[count_result] = (stack[count_stack]);
stack[count_stack]= c;
}
else
{
count_stack++;
stack[count_stack] = c ;
}
else if ( c==')') // Neu gap dau ngoac dong se lay het phan tu ra den khi gap ngoac mo
{
while( stack[count_stack] != '(')
{
count_result++;
result[count_result] = stack[count_stack];
count_stack--;
}
count_stack--;
}
}
while ( count_stack >=0 )
{
count_result++;
result[count_result] = stack[count_stack];
count_stack--;
}
return &result[0];
}

这是操作函数。我的指针真的很差:P

最佳答案

好吧,首先,在您的 Operation 函数中,您将返回一个指向临时堆栈数组的指针。在操作中,您将 char result[256] 声明为临时堆栈变量。您在此处分配的 256 个字节仅在操作函数期间有效。因此在 Operation 返回后使用指向 result 的指针将导致未定义的行为。

要解决此问题,您有几种选择:

1) 您可以在堆上分配result,(使用new 运算符)

2) 更好的是,不是返回一个 char* 指针,而是简单地返回一个 std::string 对象,所以你不需要担心分配/释放内存。

3) 最后,如果您的程序是单线程的,您还可以通过声明 static char result[256] 使 char result[256] 成为静态变量.这样,即使您从操作返回后,指针仍然有效。

我会推荐选项 2。

关于c++ - C++中指针的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1616827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com