gpt4 book ai didi

c - 相同代码的程序在不同平台下运行结果不同

转载 作者:太空宇宙 更新时间:2023-11-04 00:37:58 26 4
gpt4 key购买 nike

我写这样的代码是为了帮助我理解realloc()函数的用法。可能后面的代码有问题。

 1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5
6 void dynamic_memory_management_func()
7 {
8 printf("------------dynamic_memory_management_func------------\n");
9
10 char *str1 = (char *)malloc(16);
11 memset(str1, 0, 16);
12 strcpy(str1, "0123456789AB");
13 char *str2 = realloc(str1, 8);
14
15 printf("str1 value: %p [%s]\n", str1, str1);
16 printf("str2 value: %p [%s]\n", str2, str2);
17
18 free(str2);
19 str2 = NULL;
20
21 char *str3 = (char *)malloc(16);
22 memset(str3, 0, 16);
23 strcpy(str3, "0123456789AB");
24 char *str4 = realloc(str3, 64);
25 strcpy(str4 + 12, "CDEFGHIJKLMN");
26
27 printf("str3 value: %p [%s]\n", str3, str3);
28 printf("str4 value: %p [%s]\n", str4, str4);
29
30 free(str4);
31 str4 = NULL;
32
33 }
34
35 int main(int argc, char *argv[])
36 {
37 dynamic_memory_management_func();
38 return 0;
39 }

令我惊讶的是,程序的运行结果不同!

在mac os x 10.9.2下,结果为:

------------dynamic_memory_management_func------------
str1 value: 0x7ff7f1c03940 [0123456789AB]
str2 value: 0x7ff7f1c03940 [0123456789AB]
str3 value: 0x7ff7f1c03940 [0123456789AB]
str4 value: 0x7ff7f1c03950 [0123456789ABCDEFGHIJKLMN]

在ubuntu 12.04 LTS下,结果为:

------------dynamic_memory_management_func------------
str1 value: 0xf6e010 [0123456789AB]
str2 value: 0xf6e010 [0123456789AB]
str3 value: 0xf6e010 [0123456789ABCDEFGHIGKLMN]
str4 value: 0xf6e010 [0123456789ABCDEFGHIGKLMN]

如您所见,str4 的指针地址不同。是什么原因导致的?

最佳答案

这是预期的结果。

每次调用时选择的内存 malloc() 取决于许多事情。它可能在不同时间在同一台计算机上选择了不同的内存!更不用说在不同的计算机上了。

重要的是内存的内容。正如预期的那样,它们在您的测试中(大致)相同。

但是你有一些错误:

第 15 行:str1 无效。之前对 realloc() 的调用已使其无效。

第 16 行:str2 的内容不是“字符串”。它没有合适的终止符。用printf()

打印无效

第 27 行:str3 无效。之前对 realloc() 的调用已使其无效。

关于c - 相同代码的程序在不同平台下运行结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22437242/

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