【发布时间】:2018-12-03 10:27:42
【问题描述】:
我编写了一个代码,它首先创建一个内存分配并将一个字符串保存在另一个指针中。根据代码,释放后该值必须保存在其他地址,但它给出错误“munmap_chunk():无效指针”。
我的代码是:
#include <stdio.h>
#include <stdlib.h>
#include "testfunc.h"
#include <string.h>
int main()
{
static char *server_alg;
char *test;
char *test = (char*) malloc(30*sizeof(char));
server_alg = "A";
strcpy(test, server_alg);
printf("server_alg addr = %u \n", &*server_alg);
printf("server_alg value = %u \n", server_alg);
printf("SERVER_ALGO addr = %d \n", *server_alg);
free(server_alg);
server_alg=NULL;
printf(" nulled \n");
printf("server_alg addr = %u \n", &*server_alg);
printf("server_alg value = %u \n", server_alg);
printf("SERVER_ALGO addr = %u \n", test);
printf("SERVER_ALGO value = %u \n", *test);
return 0;
}
错了吗?
感谢您的帮助
【问题讨论】:
-
不要打印带有
%u的地址,您应该将它们转换为void *并使用%p。 -
为什么要两次声明
test?那不会编译。 -
为什么要保存地址?该地址的任何使用都会导致未定义的行为。
标签: c pointers dynamic-memory-allocation