我正在阅读这本书:"C从A到Z"。
有一个例子。
/* ptr14.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Fehler: Funktion gibt die Adresse
* einer lokalen Variablen zurück. */
/* [ Error: Function returns the address of a
a local variable. ] */
// ...
/* Möglichkeit2: Speicher vom Heap verwenden */
/* [ Option2: Use memory from the heap ] */
char *test3(void){
char *buffer = (char *) malloc(10);
strcpy(buffer, "testwert");
return buffer;
}
/* Möglichkeit3: Einen Zeiger als Argument übergeben */
/* [ Option3: Pass a pointer as argument ] */
char *test4(char *ptr){
char buffer[10];
ptr = buffer;
strcpy(buffer, "testwert");
return ptr;
}
int main(void) {
char *ptr;
/* ... */
ptr = test3();
printf("test3: %s\n", ptr);
test4(ptr);
printf("test4: %s\n", ptr);
return EXIT_SUCCESS;
}
我理解作者所讨论的问题。
为什么test4
解决方案有效?
- 栈上分配了
char buffer[10];
- 将
buffer
第一个元素的地址赋给前一作用域中的ptr
(即ptr = buffer;
)
我的期望:
使用ptr
指向buffer
应该会失败,因为该作用域应该被清除/清理掉。
我的想法有什么问题吗?
编辑 1
我将test4(ptr);
更改为ptr = test4(ptr)
,它仍然有效...
test4(char* ptr)
有效...
ptr = buffer;
可以解决问题,你需要一本新书。 - StoryTeller - Unslander Monica