#include <string>
#include <iostream>
using namespace std;
int main()
{
char** pP = NULL;
string str = 0;
pP = (char**)calloc(128, sizeof(char*));
for (int i = 0; i < 128; ++i)
{
pP[i] = (char*)calloc(128, sizeof(char));
}
pP[1000] = "ddd";
str = pP[1000];///这里会报错
printf("%s ", pP[1000]);
return 0;
}
以上代码去掉str = pP[1000];就正常运行可以输出ddd 这里怎么把pP[1000]赋值给str |
|
| 20分 |
string str(pP[1000]);
|
| 5分 |
pP = (char**)calloc(128, sizeof(char*));
相当于开辟了128个存放指针的指针数组,而pp是数组的首地址 for (int i = 0; i < 128; ++i) { pP[i] = (char*)calloc(128, sizeof(char)); } 每个数组里面的指针存放了一个char类型128字节的数组的地址 pP[1000] = “ddd”; str = pP[1000];///这里会报错 pp一共才分配了128个存放指针的数组空间,你确往1000个位置写指针值 肯定把这块堆内存空间 给破坏了! |
|
二师兄说的对啊
|
|
|
如果去掉 |
|
|
二师兄和三师兄说得对,补充一点,从异常信息看,p[1000]取到了0值,这个值又被你当指针用了,所以抛了null pointer
|
|
|
和我写的那种方式一样,在编译器调试就会报错,同样的错误我上面有图, 但问题是我用到mfc的项目里运行exe文件也报错的。 |
|
string str = 0;
char **p = new char *[10];
p[0] = "aaa";
str = p[0];
printf("%s\n", str);
这样为什么错了 |
|
| 15分 |
string str = 0;
char **p = new char *[10];
for (int i = 0; i < 10; ++i)
{ //加上这段内存分配
pP[i] = (char*)calloc(128, sizeof(char));
}
p[0] = "aaa";
str = p[0];
printf("%s\n", str);
|
|
这个我找到错误的地方了,是string str = 0;
错误 把整形复制给string类型 |
|
string str = "\0";
char **p = new char *[10];
p[0] = "aaa";
str = p[0];
printf("%s\n", str);
这样就不会有问题了 |
|
