注意:专门询问使用免费存储中的阵列和内存的问题 因此不能使用vector或此类工具的其他std工具。谢谢! 过去对这个问题的回答还不够,因为我想要我的代码为什么不起作用的具体帮助!谢谢!
希望有帮助! 我正在做stroustrup编程原理的c ++第二版。 问题是:“编写一个程序,将cin中的字符读取到一个数组中,然后在免费存储区中分配该数组,直到输入了感叹号(!)。” 还特别要求不要使用std :: string。
我尝试了以下代码:
using namespace std;
void grow_array(char* s, int size) { //grow current array to the size of int size. assumption - size is bigger than the current size of array s
if (s == 0)return;
char* big = new char[size];
for (int i = 0; s[i]; ++i)
big[i] = s[i];
delete[]s; //delete to prevent memory leak
s = big; // is this ok?
}
int main()
{
char ch = ' ';
int size = 10;
char* s = new char[size];
for (int i = 0; cin >> ch && ch != '!';++i) {
if (i + 1 == size) {//grow array every 10 character instances
size += 10;
grow_array(s, size);
}
s[i] = ch;
}
cout << s;
}
我希望输出是实际的字符数组,但它仅仅是 一定大小时适用。而是程序会卡住,然后关闭,在调试模式下它告诉我引发了一些内存冲突异常。
我不明白的是,从某个不那么大的大小中我得到了异常错误(对于某些我找不到的奇怪的Visual Studio错误)。所以这段代码并没有真正起作用,我希望得到一些帮助,以了解为什么它不起作用,错误是什么,需要更改什么以及以不同的方式回答这个问题。 谢谢分配!
修改:
why does the following code work and mine doesnt?
// copy C-style string into new array one element bigger
char* add_size(const char* s) {
if (s==0) return 0;
// get number of char in s
int n = 0;
while (s[n] != 0)
++n;
// allocate memory with room for terminating 0
char* pc = new char[n+2];
// copy string
for (int i = 0; s[i]; ++i)
pc[i] = s[i];
pc[n] = 0; // zero-terminated
delete[] s;
return pc;
}
int main()
try {
char ch;
char* my_array = new char[1];
*my_array = 0;
while (cin>>ch && ch!='!') {
my_array = add_size(my_array);
int i = 0;
for (; my_array[i]; ++i);
my_array[i] = ch;
my_array[i+1] = 0;
}
cout << my_array << "\n";
delete[] my_array;
}