- 论坛徽章:
- 0
|
本帖最后由 sculida 于 2015-09-11 00:05 编辑
/*用malloc创建一个5行9列的char数组。然后每一行都memset全部设置为字符'U'。但是最后发现,第一行里的字符居然全变了!!!*/
环境 centos gcc
代码- #include<stdio.h>
- #include<malloc.h>
- #include<string.h>
- #define length 9
- #define width 5
- void dump1(const char *);
- void dump(const char **);
- int main() {
- char **p=NULL;
- p=(char **)malloc(width);
- int i=0;
- for (i=0; i<width; i++) {
- p[i]=(char *)malloc(length);
- memset(p[i], 'U', length);
- printf("%x %x\n", p[i], p[i]+length);
- printf("%d\t", i);
- dump1((const char*)p[0]);
- }
- dump((const char**)p);
- return 0;
- }
- void dump(const char **p) {
- printf("begin dump\n");
- int i=0;
- for (i=0; i<width; i++) {
- dump1(p[i]);
- }
- }
- void dump1(const char *pi) {
- int j=0;
- for (j=0; j<length; j++) {
- printf("%d ", pi[j]);
- }
- printf("\n");
- }
复制代码 -----------------------------------------------------------------------------------------------------------------------
执行结果:
9b4030 9b4039
0 85 85 85 85 85 85 85 85 85
9b4050 9b4059
1 85 85 85 85 85 85 85 85 85
9b4070 9b4079
2 85 85 85 85 85 85 85 85 85
9b4090 9b4099
3 85 85 85 85 85 85 85 85 85
9b40b0 9b40b9
4 -80 64 -101 0 0 0 0 0 85
begin dump
-80 64 -101 0 0 0 0 0 85
85 85 85 85 85 85 85 85 85
85 85 85 85 85 85 85 85 85
85 85 85 85 85 85 85 85 85
85 85 85 85 85 85 85 85 85
--------------------------------------------------------------------------------------------------
说明第5次循环的时候,p[0]这一行的值改变了。而且p[j]各个位置的地址都不一样,不大可能是memset直接去修改p[0]行 |
|