【发布时间】:2020-07-06 12:52:33
【问题描述】:
我想创建一个程序来创建一个二维数组并从标准输入填充它以供以后操作。最初,我设计它以便函数 takeInput() 接受用户的输入并返回一个包含所有一位整数的单个字符串的 char*。然后,我的意图是获取这个 char* 并将其作为参数传递给第二个函数 createArray(),该函数将相应地填充数组。
当我的参数 char* 的值在第二个函数内开始变化(丢失值)时,就会出现问题。
注意:我已经在第一个函数中使用 malloc 为 char* 分配了内存,目的是不会使其值成为函数的本地值。
我的主要看起来像这样:
#include <stdio.h>
#include "functions.h"
int main(int argc, const char * argv[]) {
const char *string = takeInput();
int **initState = createArray(3, 3, string);
return 0;
}
这是第一个函数:
const char* takeInput() {
char string2[10];
/* some code */
char *string0 = malloc(sizeof(string2));
string0 = string2;
return string0;
}
这是第二个功能:
int **createArray(int rows, int columns, const char *string) {
int **array;
int traverse = 0;
// allocating memory for number of rows
array = malloc(rows * sizeof(int*));
// allocating memory for number of columns
for(int i = 0 ; i < rows ; i++) {
array[i] = malloc(columns * sizeof(int));
}
// populating indices in 2D array with values from string
for(int i = 0 ; i < rows ; i++) {
for(int j = 0 ; j < columns ; j++) {
// converting chars to digits or the '_' char
if (string[traverse] != 95) {
array[i][j] = (string[traverse] - 48);
}
else {
array[i][j] = 48;
}
traverse++;
}
}
return array;
}
const char *string 的值会在我的代码到达第一个 for 循环后立即发生变化,并在其余代码中减小。非常感谢任何想法/建议!
【问题讨论】:
-
string0 = string2;行不会将值复制到分配的内存中,它只是更改了string0和leaks the allocated memory 指向的内容。您应该删除string2,/* some code */应该将值直接写入分配的内存中。 -
@user3386109,非常感谢!使用 strcpy() 解决了这个问题,而不是使用 '=' 来复制地址。
标签: c pointers memory heap-memory