我正在處理一個需要我從 C 代碼呼叫 C 函式的個人專案。這些 C 函式回傳一個 calloc() 指標。
1t5.h
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
char * prob1(char * number);
1t5.c
#include <1t5.h>
char * prob1(char * number) {
int ni = atoi(number);
char prompt[] = "hello\n";
char * answer = (char*)calloc(ni, sizeof(prompt));
for (int i = 0; i < ni; i ) {
strcat(*answer, prompt);
}
return answer;
}
該 C 代碼應該回傳給定數量的“hello\n”。
鏈接.cpp
string Link::problemRouting(string problem, vector<string> contents) {
string answers = "";
char * ca;
int pi = stoi(problem);
for (int i = 0; i < contents.size(); i ) {
ca = cv.stringToChar(contents[i]);
// C Standard
if (pi <= 5) {
char * answer;
switch(pi) {
case 1:{
answer = prob1(ca);
}
case 2: {
answer = prob2(ca);
}
case 3: {
answer = prob3(ca);
}
case 4: {
answer = prob4(ca);
}
case 5: {
answer = prob5(ca);
}
}
cout << answer;
answers =answer;
free(answer);
}
}
return answers;
}
此 C 代碼獲取回傳值并將其保存以稍后存盤到文本檔案中。
問題是當我輸入一個數字時,比如說257,那么回傳值是257,而不是一噸"hello\n"。
uj5u.com熱心網友回復:
感謝@Remy Lebeau 的回答。
我的代碼包含許多記憶體泄漏的機會,導致回傳值混亂。
string Link::problemRouting(string problem, vector<string> contents) {
string answers = "";
char * ca;
int pi = stoi(problem);
for (int i = 0; i < contents.size(); i ) {
ca = cv.stringToChar(contents[i]);
// C Standard
if (pi <= 5) {
char * answer;
switch(pi) {
case 1:{
answer = prob1(ca);
break;
}
}
free(ca);
cout << answer;
answers =answer;
free(answer);
}
}
return answers;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/431678.html
下一篇:函式指標正在改變自己的地址
